C語言中浮點數的精度問題

2021-08-19 18:32:36 字數 704 閱讀 1176

1.浮點數出現精度問題的原因:浮點

位元組數有效數字位

float46

double815

實際上一般選用double型別,double有15位有效數字若輸入的數字為16位則會有誤差。

int main()

2.怎樣才能減少誤差帶來的影響:

使用巨集定義乙個eps來判斷誤差:

#define eps 0.000001

(1)判斷a == b      fabs(a-b) < eps

(2)判斷a != b       fabs(a-b) > eps

(3)判斷a < b        a-b < eps

(4)判斷a > b        a-b > eps

#include#include#define eps 0.000001

int main()

if(fabs(a-b) > eps) //(2)

return 0;

}

#include#include#define eps 0.000001

int main()

if((a-b) > eps) //(4)

return 0;

}

以上為判斷a與b關係的方式。

浮點數精度問題

一 例子 首先我們去編譯器試試 double a 1.9 通過新增監視檢視a的值 會發現a的值是1.8999999 二 開始今天的學習 在最開始學c 的時候並沒有對浮點數進行很深入的學習,認為浮點不就是小數嘛,首先在c 的巨集裡面有 flt max 和 flt min 的定義,float是四位元組的...

C語言中魔性的float浮點數精度問題

如果你以前接觸過c語言,那麼對下面的這段 一定很熟悉 include int main void 相信很多人不用執行,能夠直接報出答案,f num1 21.75 f num2 13.45 f num1 f num2 35.2 無論是從常識還是理論角度都不難理解。下面我們執行一下程式,驗證我們的猜測正...

浮點數的精度問題

float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 對於二進位制的小數 1.1 1 20 1 2 1 1 1 2 1.5 1.01 1 20 0 2 1 1 2 2 1 1 4 1.25 1.0011 1...