最近在书上看到这程式码,讲电脑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)
这样让我觉得更奇怪了.....不懂为什么换个编译器就不一样,
有人能解释为什么吗? 感恩!