溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python浮點(diǎn)數(shù)陷阱

發(fā)布時(shí)間:2020-07-06 14:13:12 來(lái)源:網(wǎng)絡(luò) 閱讀:524 作者:王首元 欄目:編程語(yǔ)言

先放一張圖
python浮點(diǎn)數(shù)陷阱
計(jì)算機(jī)內(nèi)部對(duì)于浮點(diǎn)數(shù)處理是不夠精確的。

1、浮點(diǎn)數(shù)的二進(jìn)制表示
整數(shù)部分:用十進(jìn)制整數(shù)整除以2,得到商和余數(shù),該余數(shù)就是二進(jìn)制數(shù)的最低位,然后繼續(xù)用商整除以2,得到新的商和余數(shù),以此類推,直到商等于0,由所有余數(shù)倒排組成了該整數(shù)的二進(jìn)制表現(xiàn)形式。
小數(shù)部分:乘以2,取整數(shù)0或者1,剩下的小數(shù)繼續(xù)乘2一直重復(fù),直到小數(shù)部分為0或達(dá)到指定的精度為止

2、存儲(chǔ)規(guī)則
由于Python封裝了C語(yǔ)言的特性,根據(jù)國(guó)際IEEE754標(biāo)準(zhǔn)進(jìn)行存儲(chǔ)。
IEEE754標(biāo)準(zhǔn)包含一組實(shí)數(shù)的二進(jìn)制表示法,由符號(hào)位、指數(shù)位、尾數(shù)位組成,各種精度各部分的位數(shù)如下:
python浮點(diǎn)數(shù)陷阱

3、轉(zhuǎn)換為IEEE754標(biāo)準(zhǔn)的二進(jìn)制數(shù)
規(guī)格化
當(dāng)尾數(shù)不為0時(shí),尾數(shù)域的最高有效位為1,這稱為浮點(diǎn)數(shù)的規(guī)格化。否則,以修改階碼同時(shí)左右移動(dòng)小數(shù)點(diǎn)位置的辦法,使其成為規(guī)格化數(shù)的形式。
32位浮點(diǎn)數(shù):
python浮點(diǎn)數(shù)陷阱,S為符號(hào)位(0正1負(fù)),M為規(guī)格化后的小數(shù)尾數(shù)
64位浮點(diǎn)數(shù):e=E-1023

移碼
在真值基礎(chǔ)上加2^n(機(jī)器字長(zhǎng)為n+1),其中2^n>x≥-2^n

舉一個(gè)簡(jiǎn)單例子:
1.5=[1.1],符號(hào)位為0,指數(shù)e=0,規(guī)格化后尾數(shù)為1.1。

尾數(shù)域M右側(cè)以0補(bǔ)全,得尾數(shù)域:
M=[100?0000?0000?0000?0000?0000]

階碼E:
E=[0]移?1=[10000000]?1=[01111111]

得1.5的機(jī)器碼:
1.5=[0011?1111?1100?0000?0000?0000?0000?0000]
十六進(jìn)制表示為1.5=0x3fc00000。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI