程式語言精度誤差python,c語言,c

2022-09-10 18:00:20 字數 983 閱讀 9584

num1 =

0.1num2 =

0.2num3 =

0.3num4 = num1 + num2

if num3 == num4:

print

("y"

)else

:print

("n"

)

結果是n

0.1和0.2 相加 不等於 0.3

0.1+0.2=0.30000000000004

兩浮點數x,y進行加減運算時,必須按以下幾步執行(可參考 [4] 中插圖):

(1)對階,使兩數的小數點位置對齊,小的階碼向大的階碼看齊。

(2)尾數求和,將對階後的兩尾數按定點加減運算規則求和(差)。

(3)規格化,為增加有效數字的位數,提高運算精度,必須將求和(差)後的尾數規格化。

(4)捨入,為提高精度,要考慮尾數右移時丟失的數值位。

(5)判斷結果,即判斷結果是否溢位。

關鍵就在與對階這一步驟,由於float的有效位數只有7位有效數字,如果乙個大數和乙個小數相加時,會產生很大的誤差,因為尾數得截掉好多位。例如:

123 + 0.00023456 = 1.23*10^2 + 0.000002 * 10^2 = 123.0002

那麼此時就會產生0.00003456的誤差,如果累加多次,則誤差就會進一步加大。

kahan summation演算法

int

main()

float

add(

float f,

int count)

3.使用double,精度更高

4.ieee浮點數,為了規格化,精度每超過2的整數次冪,精度要下降一位,

你的f是0.1,float位數是23,當sum足夠大的時候,會出現 sum+f==sum 的情況,這個是ieee標準,和c++沒關係,事實上編譯器應該已經做了浮點精度調整了。

潛在誤差精度誤差

乙個浮不精確到7位小數。浮精確到大約7位有效數字。乙個重要的數字是任意數字,不是乙個佔位符0,包括在小數點左邊的。例如,0095有兩個佔位符零點,所以只有2位數。34.90有4個重要人物。有兩種型別的我們需要警惕的浮點值的誤差 捨入誤差和精度誤差。捨入誤差可以任意長度的數字發生,因為一些數字的二進位...

Python C語言擴充套件

這裡編寫個簡單例子來說明下具體是如何操作的 建立dll專案,結構如下 test mydll.h mydll.c 標頭檔案 mydll.h ifndef mydll h define mydll h ifdef build dll define dll export declspec dllexpor...

c語言 python C語言和python的區別

python可以說是目前最火的語言之一了,人工智慧的興起讓python一夜之間變得家喻戶曉,python號稱目前最最簡單易學的語言,現在有不少高校開始將python作為大一新生的入門語言。本萌新也剛開始接觸python,發現python與其他語言確實有很大的區別。python是由c語言實現的,因此想...