關於誤差分析以及浮點數的精度問題

2021-08-19 18:37:03 字數 945 閱讀 7970

浮點,簡單的講就是實數的意思。浮點數就是可以近似表示某個任意的實數。

浮點精度分為:

16位:一半(二進位制16) 

32位:單(binary32),十進位制32 

64位:double(binary64),decimal64 

128位:四(binary128),decimal128 

256位:八進位制(binary256) 

擴充套件精度格式(40位或80位)

我們經常用的有float和double兩種型別:

單精度,通常用於表示c語言系列中的「float」型別(雖然這不能保證)。這是乙個二進位制格式,占用32位(4位元組),其有效位數的精度為24位(約7位十進位制數字)。

雙精度,通常用來表示c語言系列中的「double」型別(雖然不能保證)。這是乙個占用64位(8位元組)的二進位制格式,其有效位數的精度為53位(約16位十進位制數字)。

例如我們將的這個例子:

判斷二元一次方程根的情況分析就有關係到精度問題

#include

#include

#include

#define eps 0.000001

void fun(double a,double b,double c)

else if(-eps<=d && d<=eps)//d==0

else if(d > eps)//d>0

else

}int main()

這裡定義的精度就為0.000001,具體參照ieee標準定義的浮點數。

例如這個**:

float f=0.1;

float sum=0;

for(i=0;i<40000;i++)

sum+=f;

這個**的誤差就明顯了,結果顯示為4001.552979,存在明顯的誤差,理論應該是4000的。

所以這個float的誤差如果累計下來就會很大。

雜談 關於浮點數的精度問題

1 包裝類float中為什麼有兩個常量來表示最小值 min value和 min normal?個人理解 既然有兩個常量,說明兩個常量表示的數值不一樣,查閱資料後發現,min value 值為 3.4e 45 的常量,它表示 float 型別能夠表示的最小值。min normal 儲存 float ...

PHP 浮點數的精度

浮點數的精度有限。儘管取決於系統,php 通常使用 ieee 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e 16。非基本數 算可能會給出更大誤差,並且要考慮到進行復合運算時的誤差傳遞。此外,以十進位制能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二...

浮點數精度的轉換

在 x86 x64 體系裡,由於 x87 fpu 硬體使用擴充套件雙精度格式,因此必然會遇到 single double precision 格式與double extended precision 格式之間的互換問題。轉換為擴充套件雙精度數 當由單精度數或雙精度轉換為擴充套件雙精度數時,expon...