最近在書上看到這程式碼,講電腦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)
這樣讓我覺得更奇怪了.....不懂為什麼換個編譯器就不一樣,
有人能解釋為什麼嗎? 感恩!