[問題] float 和 double 的問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
dev C++
最近在看浮點數的表示法..
很多書都說範圍是3.4E-38~3.4E+38
但是我看有些網頁用IEEE745的表示法下去算..
範圍卻是1.2E-38~3.4E+38 不知道那個是正確的呢??
另外,我在dev上寫了一個小小的運算式
float a=0.01;
printf("a*3=%f\n",a*3);
printf("a*35=%f\n",a*35);
printf("a*353=%f\n",a*353);
printf("a*3535=%f\n",a*3535);
結果前面都很正確,但是到了最後一行答案卻變成35.349999
要改成printf("a*3535=%.2f\n",a*3535);
答案才會正確,我記得書上說浮點數精確到小數第7位..
為什麼才第2位就出問題呢??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.241.53.76
→
01/14 18:33, , 1F
01/14 18:33, 1F
→
01/14 18:33, , 2F
01/14 18:33, 2F
→
01/14 19:00, , 3F
01/14 19:00, 3F
→
01/14 19:01, , 4F
01/14 19:01, 4F
→
01/14 19:05, , 5F
01/14 19:05, 5F
→
01/14 19:08, , 6F
01/14 19:08, 6F
→
01/14 21:04, , 7F
01/14 21:04, 7F
→
01/14 23:39, , 8F
01/14 23:39, 8F
→
01/14 23:41, , 9F
01/14 23:41, 9F
→
01/14 23:49, , 10F
01/14 23:49, 10F
我還是覺得奇怪..如果浮點數存的時候就有誤差(因為只有23位可存尾數)..
所以存在電腦裡應該0.01是存成0.00999999....
那在printf("%f",0.01)的時候..應該就會印成0.00999999
可是印的時候..還是0.01啊..
然後..乘起來的時候也是因為誤差
比如乘3,35,353應該也一樣會有問題為什麼印出來都是正確的?
※ 編輯: sunlights 來自: 111.240.7.24 (01/15 17:24)
→
01/15 17:29, , 11F
01/15 17:29, 11F
→
01/15 17:29, , 12F
01/15 17:29, 12F
→
01/15 17:32, , 13F
01/15 17:32, 13F
→
01/15 17:33, , 14F
01/15 17:33, 14F
→
01/15 17:36, , 15F
01/15 17:36, 15F
→
01/15 17:37, , 16F
01/15 17:37, 16F
最後一行不懂..
※ 編輯: sunlights 來自: 111.241.55.228 (01/16 18:17)
→
01/16 22:51, , 17F
01/16 22:51, 17F
※ 編輯: sunlights 來自: 111.240.16.196 (01/17 17:59)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 3 篇):