我知道如何將整數和浮點數轉換爲binay。但是一些浮點數沒有確切的二進制格式。像0.5可以精確地寫成0.1,0.25可以寫成0.01。但是如何確定一個數字是否可以完全轉換爲二進制?檢查浮點數是否完全轉換爲二進制
回答
要表示一個二進制浮點格式,數字必須是二的冪的倍數,包括負冪。例如,.375可以表示,它是1/8的倍數。 (1/8是.125,並且.375是那個的三倍)。由於數字的部分必須符合浮點格式,因此還有其他要求:
有限數字可以用通用IEEE 754雙精度格式當且僅當它等於中號•2 ë對於某些整數中號和Ë使得-2 < 中號 和-1074 ≤e≤971.
對於單精度,-2 < 中號 和-149≤Ë≤104
這些值來自指定所述浮動參數點格式,比如分數和指數字段有多少位可用,以及指數有多少偏差。
以下是測試數字是否符合上述條件的方法。
首先,如果數字有一個小數部分,請嘗試乘以數字2,直到沒有小數部分。如果你乘以149(單精度)或1074乘(雙精度),這個數字是不可表示的。如果這個數字沒有小數部分,但是是平分的,則除以2,直到奇數。 104(單精度)或971(雙精度)分度後停止。當您完成乘法或除法時,請查看剩餘數字的絕對值。如果它大於或等於16,777,216(對於單精度)或9,007,199,254,740,992(對於雙精度),則該數字不可表示。否則,它是。 (提示:當用十進制數字進行乘法步驟時,如果小數部分以5以外的數字結尾,則該數字不可表示,例如,.4和.24不可表示。 ,.25和.625是,雖然.525不是。)
如果您有大整數算術可用,請將xxx.yyy
重寫爲分數xxxyyy/10^n
其中n是小數部分yyy的長度(位數)。
您轉換分子和上面部分,以二進制的分母的十進制表示,然後降低分數:
- 計算滿足gcd(XXXYYY,10^n)時,
- reducedNumerator = XXXYYY/GCD(XXXYYY, 10^n)時,
- reducedDenominator = 10^N/GCD(XXXYYY,10^N)
如果reducedDenominator是整除5(餘數是零),那麼數目並不以二進制所能表述,否則它是,一個nd浮點數可以表示爲sign*integerSignificand*2^biasedExponent
但是在大多數語言中,有效位數的位數和指數範圍是有限的。
讓我們來看看分子絕對值首先,(我相信不是0),並提取
nh
設置爲1,最高位=等級,最低位的nl
=等級設置爲1
nh+1-nl
給你的比特(二進制數字)表示有效所要求的數量,則它必須是限制
例如下,在IEEE 754雙精度:nh+1-nl<=53
或nh-nl<53
現在讓我們來看看分母,如果不能整除5,它是兩個10 .... 0的功率,所以我們也可以重寫整除試驗:取
-
如果DH不等於DL中,然後數目並不以二進制所能表述最高位的
dh
=秩設置爲1dl
=秩最低位的設置爲1
。
如果dh==dl
,您必須有nh-dh
保持在一定的範圍內,但也nl-dh
。
例如,在IEEE 754雙精度:-1074 <= nl-dh
和nh-dh <= 1023
,如果你使用的是IEEE 754種格式,是要知道什麼是有趣的,更簡單的是否通過的libc或提供的轉換功能atod
或atof
相當於您的語言提供的將正確提高IEEE 754不精確標誌,以及如何使用您的語言訪問此標誌...
- 1. 將二進制轉換爲浮點數
- 2. 將二進制轉換爲浮點
- 3. 將二進制浮點數轉換爲十六進制浮點數
- 4. 將十進制浮點數轉換爲二進制
- 5. 將十進制浮點數轉換爲二進制並返回
- 6. 負浮點到二進制轉換
- 7. 如何將二進制浮點數轉換爲小數?
- 8. 從十進制轉換爲浮點數
- 9. Numpy從二進制字符串轉換爲浮點數組
- 10. 如何將二進制數據轉換爲浮點值?
- 11. 將保存二進制的字符串轉換爲浮點數
- 12. 將浮點數轉換爲二進制C
- 13. 將二進制32位IEEE-754浮點數轉換爲.net
- 14. 將二進制塊轉換爲浮點數
- 15. 如何將浮點數轉換爲二進制?
- 16. 浮動到二進制<->二進制浮動轉換
- 17. 將浮點數向量轉換爲十六進制/二進制字符串
- 18. 檢查字符串是否爲浮點數僅表示爲十進制數
- 19. 將C++轉換爲C#將二進制文件讀入二維浮點數組
- 20. 是否有可能在浮點二進制數中有一個浮點指數?
- 21. 如何將二進制指數-10的數字轉換爲浮點數?
- 22. Python 2字節二進制數組轉換爲整數或浮點數
- 23. 將二進制文件數據轉換爲PHP中的浮點數據
- 24. 是否將有符號整數轉換爲比逆操作便宜的二進制浮點數?
- 25. 檢查文件數據是否爲二進制文件
- 26. 轉換32位二進制數轉換爲十進制
- 27. 將二進制數字轉換爲二進制數字
- 28. 將十進制值轉換爲32位浮點十六進制
- 29. 將IEEE浮點十六進制轉換爲十進制?
- 30. 從二進制讀取2D浮點數組,從char *轉換爲float [2]
您想知道人類如何檢查數字或如何編寫將檢查十進制數字? –