我已經將9501/100.0f等分爲95.01f的結果,但由於某些不正常的原因結果爲95.01000000002f。劃分兩個花車並沒有給出確切的結果
我意識到四捨五入錯誤,並且認爲劃分兩個較大的浮點數可能會給出不正確的結果,但這兩個數字相對較小,並且它們不應給出錯誤答案。
我已經改變了漂浮到雙打,只看到相同的結果。
所以我的答案是,爲什麼我看到這個錯誤的輸出?
最終解決方法是將數字複製到字符串並返回。
我已經將9501/100.0f等分爲95.01f的結果,但由於某些不正常的原因結果爲95.01000000002f。劃分兩個花車並沒有給出確切的結果
我意識到四捨五入錯誤,並且認爲劃分兩個較大的浮點數可能會給出不正確的結果,但這兩個數字相對較小,並且它們不應給出錯誤答案。
我已經改變了漂浮到雙打,只看到相同的結果。
所以我的答案是,爲什麼我看到這個錯誤的輸出?
最終解決方法是將數字複製到字符串並返回。
浮點數是以二進制表示的數字,精度有限。
預期結果與實際結果之間的誤差是由二進制表示中的數字95.01是無限週期性的事實引起的。
Double只有51個二進制數字,因此在以雙精度存儲數字之前必須進行一些舍入。單精度只有23位數字。
無法用有限精度floatin點數表示95.01而沒有任何錯誤。 但是,您可能會相信前6-9個十進制數字,因此您應該使用某種有意義的格式來格式化數字。
浮點數不準確,處理它們有很多特質。
What Every Computer Scientist Should Know About Floating-Point Arithmetic
我也喜歡上浮點值布魯斯·道森的blog entries。
啊好,我們的另外一個已經成爲編程:)教會一個人
浮動點不準確,精度會有所不同,從機器到機器。 1.0f!= 1.00000000000000000000000000000000000等等,它更像1.0000001002003400011等等(我在這裏只是選擇了任意數字)。
恩,不,1.0f是1.0000000 ...有任何明智的浮點實現。你知道一個不是嗎? –
其他人已經發現了浮點法的神奇屬性。這是時代的到來。 –
這只是一個常見的四捨五入錯誤。 –
漂浮點很難用任何不是2的冪的任何東西來精確劃分。你剛剛注意到100的確不是2的冪。 –