[问题] C的precision判断

楼主: yuanchris1 (过往云烟)   2014-07-18 01:33:04
最近在书上看到这程式码,讲电脑bit储存的概念,
#include <stdio.h>
int main()
{
float a;
a=1.0/3.0;
if(a+a+a==1.0) printf("Equal");
else printf(Not Equal");
return 0;
}
照理说(书上),答案会是Not equal,
但我用orwell dev c++ 5.6.3去跑,竟然会显示Equal!
一路测试到a=1.0/10.0才显示Not Euqal,
在测试几个,1除以10以上就几乎都会显示Not Equal(当然16会是Equal)
觉得超奇怪,想说会不会是编译器出问题,
编译器原本用64bit,改成32bit后,
竟然会显示not equal了!(也就是1/3+1/3+1/3不等于1)
这样让我觉得更奇怪了.....不懂为什么换个编译器就不一样,
有人能解释为什么吗? 感恩!
作者: LPH66 (-6.2598534e+18f)   2014-07-18 01:45:00
并不是一定 No, 而是某些值 Yes, 某些值 No是哪一种跟机器架构、浮点数运算、编译器最佳化都有关
作者: azureblaze (AzureBlaze)   2014-07-18 10:42:00
disassembly 不然就记得不要这样做就好了
作者: Killercat (杀人猫™)   2014-07-18 11:23:00
float的operator==的使用都该被列为禁止...
作者: x000032001 (版废了该走了)   2014-07-18 16:30:00
置底13诫-11

Links booklink

Contact Us: admin [ a t ] ucptt.com