[討論] double的計算上的問題

看板C_and_CPP (C/C++)作者 (低調一點的好)時間13年前 (2013/05/14 11:19), 編輯推噓0(006)
留言6則, 3人參與, 最新討論串1/1
目前我在驗証演算法是否正確 用在window底下安裝的 Dev C++下(我習慣先在Dev下驗証) 撰寫一樣計算式的function來驗証值是否正確 以下是意思差不多的code double value[2]; value[0]=55803.57411; value[1]=1000000000.000001; printf("\n %f",value[0]+value[1]); 得到的結果是1000055803.57411 以上是在window底下安裝的 Dev C++執行的結果 跟手算的結果相同 但是我在linux arm底下計算的結果卻是1000055808.0 這很奇怪,一時之間我也不知道是什麼問題 直覺是精確度的問題,但是又認為誤差只有在小數點後幾位才會發生 但也差太多了吧 二個值差了4.多 不知道有無大大知道這是什麼問題呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.128.226

05/14 11:47, , 1F
05/14 11:47, 1F

05/14 11:54, , 2F
1000000000.000001 已經超過IEEE-754 mantissa的長度
05/14 11:54, 2F

05/14 12:25, , 3F
當然馬會有誤差,不管小數點在哪裡都是一樣
05/14 12:25, 3F

05/15 01:01, , 4F
我只知道誤差有時跟rounding mode有關
05/15 01:01, 4F

05/15 03:23, , 5F
在想應該也和CPU的FPU架構或運算時使用的bit數有關@_@"
05/15 03:23, 5F

05/15 05:32, , 6F
要有有效數字觀念,沒誤差是運氣好。
05/15 05:32, 6F
文章代碼(AID): #1HaQqt5p (C_and_CPP)
文章代碼(AID): #1HaQqt5p (C_and_CPP)