float精度問題

float(M,D),存入值會因爲精度問題發生變化,及存在後面的小數點的值可能會與存入的值不一樣。

產生這個的原因是與CPU的浮點運算精度有關,不同的CPU,精度會有差別。大部分情況下目前主流的X86的CPU,有如下精度:

要得到1位或2位精確小數的話,整數不能高於 32767

即:f<32767.99

因爲 2E15=32768

 所以最多隻能正確處理0~32767的整數,

要得到3位 精確 小數的話,整數不能高於16383

即:f< 16383 .999

因爲 2E14=16384

要得到4位 精確 小數,整數不能高於2047

即:f< 2047 .9999

而 2E11=2048

要得到5位 精確 小數,整數不能高於127

即:f< 127 .99999

而 2E7=128

要得到6位 精確 小數,整數不能高於15

即:f<15 .999999

而 2E4=16

要得到7位 精確 小數,整數不能高於0

即:f< 0 .9999999

而 2E0=0

要得到8位以上的 精確 小數,是不可能的

即:f不存在


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章