作者onlywig (環島旅行ing)
看板C_and_CPP
標題[問題] 關於浮點數的運算
時間Tue Jul 7 22:58:58 2009
每次來這問問題都很不好意思~~
因為總覺得我問的問題都很淺...卻又常讓我的腦袋困擾很久
問題很短,如下:
我是用了double的長浮點數來運算 (因為資料量很大且要很精準)
但我發現到兩個浮點數相除竟然精準度有誤差....
EX:
8/1000000 它顯示的結果為0.000014 = =....
我有爬文過 好像也沒人問類似這樣的問題~
翻書是有說到用fabs的指令配合限定範圍 但我的8與1000000是已知的
有點不知道要怎放進去那個指令..
難道真的沒有辦法很精確嗎???
因為我是跑通訊系統的模擬 是希望沒有計算上的誤差
還有 我用的是DEV-C...
希望有人能解決我的疑惑了~ 感謝萬分!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.40.182
1F:→ th19883617:囧 我用devC++他顯是 8e-006應該沒問題阿 07/07 23:20
2F:→ james732:浮點數本來就會有誤差了 要精準恐怕要藉助其他library 07/07 23:24
3F:→ VictorTom:請去K IEEE754浮點數表示法的spec, 你就知道原生的浮點 07/07 23:34
4F:→ VictorTom:數資料型態"一定"會有誤差; 4 bytes或8 bytes本來就不可 07/07 23:35
5F:→ VictorTom:能毫無誤差的表達所有範圍內的實數的; 而且理論上各種應 07/07 23:35
6F:→ VictorTom:用理論上都有容許誤差, 要做到"完全無誤差", 我想計算時 07/07 23:36
7F:→ VictorTom:間上與儲存空間上會是另一個極度無法滿足的難點.... 07/07 23:37
8F:→ VictorTom:若計算結果一定是有理數, 或許可以試做/用類分數型態@@" 07/07 23:39
9F:→ onlywig:但至少 希望誤差是超級超級小的那種...小數點8位後才有誤 07/08 00:09
10F:→ onlywig:差...唉 苦惱 感謝各位囉 我再想想^^ 07/08 00:09
11F:→ littleshan:你的程式碼應該有問題,誤差不可能如此大 07/08 00:34
12F:推 VictorTom:後來試了一下, 應該是樓上說的, 你的程式碼有問題.... 07/08 00:38
13F:→ VictorTom:double的mentisa好像有50 bit, 理論精確度應該有 07/08 00:40
14F:→ VictorTom:1.xxxxx 10多位小數 eN 才對....@_@" 07/08 00:41
15F:推 ledia:不是一定有誤差, 像是 0.5 就不會有誤差 XD 07/08 00:55
16F:推 VictorTom:嗚~~抓人家語病....Q_Q~ 07/08 01:14