[問題] C的precision判斷
最近在書上看到這程式碼,講電腦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)
這樣讓我覺得更奇怪了.....不懂為什麼換個編譯器就不一樣,
有人能解釋為什麼嗎? 感恩!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.33.102
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1405618387.A.7EB.html
推
07/18 01:45, , 1F
07/18 01:45, 1F
→
07/18 01:46, , 2F
07/18 01:46, 2F
照理說 1/2 1/4 1/8 這些都會是被正確記下的,而1/3應該就會有近似的問題,
但竟然64bit會有很多例外,10以下他都顯示Equal,10~14顯示Not Equal,
15又顯示Equal,我就找不出解釋的原因QQ
※ 編輯: yuanchris1 (220.137.33.102), 07/18/2014 10:21:06
→
07/18 10:42, , 3F
07/18 10:42, 3F
→
07/18 11:23, , 4F
07/18 11:23, 4F
→
07/18 16:30, , 5F
07/18 16:30, 5F