题目:一个float变量赋值为3.1时,为什么printf输出的值为3.0999999?(在VS环境下,输出为3.1000000)
【答案】
计算机是用二进制来表示浮点数和整数的。在十进制里,0.1是个简单、精确的小数,但是转换二进制表示却是循环小数0.0001100110011…。因此,3.2在十进制可以准确地表示,在二进制却不能。但二进制转换为十进制时,该数值便就不一致了。
题目:
double a,b;
//…
if(a==b)
{//是否相等。}
【答案】
不相等。
解决:
#include<math.h>
if((fabs(a-b)<=epsilon*fabs(a)))