2015-12-12 33 views
0

我採取了一個普通的整數和鑄造它浮動,我發現很奇怪的是,這取決於我鑄造的價值,在轉換後,LSB可以翻轉一下。將int轉換爲float - 這是如何工作的?

下面是一個例子:

Enter a number: 1313131360 
FLOAT:   01001110100111001000100110010111 
         ^
       This is where the mantissa starts 
INT(Original):   1001110010001001100101101100000 
INT(BackFromFloat):  1001110010001001100101110000000 

我拿了號碼1313131360和鑄造它浮動,並回到INT,你可以看到在上線的第8位已經變成了一個。

更多我發現,如果我輸入號碼1313131328不會改變這一點:

Enter a number: 1313131328 
FLOAT:   01001110100111001000100110010110 
         ^
       This is where the mantissa starts 
INT(Original):   1001110010001001100101101000000 
INT(BackFromFloat):  1001110010001001100101100000000 

這是爲什麼?

+3

請看[浮點運算是否壞了?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

+0

@ iharob,我同意......完成。 – user1326293

+0

這兩個例子中的數字都發生了變化 - 爲什麼關注第8位? (順便說一句,「尾數」從你標記的位置開始向右一點)。 –

回答

0

在這兩種情況下,轉換都進行了四捨五入到四捨五入的關係,並且關係變得平緩。在每種情況下,最後的7位必須被丟棄。問題是位8的哪個值使得浮點數儘可能接近原始輸入。

01100000比至00000000

01000000接近千萬是00000000和10000000之間正好一半的方式這將調用其拾取一個使所述至少顯著尾數位零領帶斷路器規則。