※ 引述《coscell.bbs@bbs.cis.nctu.edu.tw (goodman)》之銘言: : ==> 在 WolfLord.bbs@ptt.cc (呆呆小狼�� �� ��N�� �� ) 的文章中提到: : > double tax=0.48; : > 這樣應該就可以了,因為浮點數的精密度不足無法表示那麼多的數字位數。 : > 改成倍精度浮點數問題就解決了。 : 果然如此,多謝多謝! : tax 只有小數兩位,理所當然覺得用 float 就夠了。 : printf 用常數驗證也沒問題。怎麼也沒想到問題出在變數宣告。 : C 語言真南! C語言本身很簡單,難的是觀念要清楚。就是因為語言太簡單了,所以觀念沒弄 清楚就會模擬兩可得到各種奇怪的答案。 浮點數基本上是一組指數與一組整數所組成的,整數表達數字實體,指數表達小 數點的位置。一般浮點數是32BIT的資訊,其中6BIT被用來做指數,26BIT被用來 表達數字除掉符號後能表達的範圍為0-33554432 (33554432-0.33554432,保障 七位數精密度),所以只要超過這個數字就會發生公差。然,倍精度浮點數的則 是有 64BIT長,指數長達10個BIT,數值達50個BIT以上(保障15位數精密度), 自然能表達比較精細。如果不夠用,C 還有 long double 這個長達型態80BIT的 超級數字型態,可以表達3.37 *10^4932 並且保證有18位數的精密度。 -- 作別人不願作的事,是好人!。 作別人不敢作的事,是壞人!。 作別人不能作的事,是天才!。 作別人不會作的事,是…腦殘!! WolfLord -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.225.164.155