浮点数的奇怪现象

int32位 posted @ Aug 20, 2013 05:16:56 PM in c/cpp , 1303 阅读
转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!
double d = 1.2 - (long)1.2;
d *= 10;
printf("%d\n", (int)d);

面试时遇到这个问题,问输出是多少? 大多数人会立马回答输出是2,但实际上输出并不是凭空臆想的结果。 其实我们都知道,浮点数在计算机中只能近似表示,存在误差,计算机中根本不存在确切的0.0,即说明我们不能直接比较浮点数是否等于0.0,即

#include <stdio.h>
int main(int argc, char **argv)
{
	double d = (1.1 - 1.0) * 10 - 1;
	printf("%lf\n", d);
	/* d = 0.000000 */
	if (d == 0)
		printf("true\n");
	else
		printf("false\n");
	return 0;
}

会返回false! 而应该使用fabs(f1, f2) <= precision 进行比较,注意这个precision是绝对误差,当f1和f2在这个绝对误差附近时可能出现问题!所以开头那段程序的输出可能是2,也可能是1!

 

转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!
  • 无匹配
  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter