我想知道浮點數和如何工作的雙重之間進行總和。 我怎樣才能總結兩個雙(或浮點數)使用位運算?如何爲位操作
如何爲位操作
回答
簡短的回答:如果你要問,你是不是要實現從位運算符浮點加法。這是完全可能的,但有一些細節需要你以前問過。你可以通過實現一個double→float轉換函數來開始,它更簡單,但會向你介紹許多概念。你也可以做雙→最接近的整數作爲exercise。
儘管如此,這裏是另外的幼稚版本:
使用對於每個兩個操作數的位的大陣列(254 + 23爲float
,2046 + 52 double
)。根據指數將有效位置放在數組中的正確位置。假設參數都被歸一化,不要忘記放置隱含的前導1.添加兩個數組,其通常規則爲binary addition。然後將結果數組轉換爲浮點格式:首先查找最左邊的1;這個最左邊的1的位置決定了指數。結果的有效位在該前導1之後開始,分別爲23或52位寬。之後的位決定值是否應該向上舍入或向下舍入。
雖然這是天真的版本,這已經是相當複雜的。
非天真版本不使用2100位寬陣列,而是利用一些「保護位」代替(請參見this document中的「四捨五入」部分)。
附加微妙之處包括:
- 的參數的符號位可意味着大小應減去的添加,或添加了一個減法。
- 其中一個參數可以是NaN。那麼結果是NaN。
- 其中一個參數可以是無窮大。如果另一個參數是有限或相同的無窮大,結果是相同的無窮大。否則,結果是NaN。
- 其中一個參數可以是非規格化的數字。在這種情況下,在將數字傳送到位數組進行添加時,不會有前導1。
- 加法的結果可以是一個無窮大:根據實現的細節,這將被認爲是指數太大而不適合格式,或者在添加二進制數組時溢出(溢出也可以在舍入步驟期間發生)。
- 加法的結果可以是非規格化的數字。這被認爲是在比特陣列的前2046比特中缺少前導1。在這種情況下,數組的最後52位應該被轉換爲結果的有效位數,並且指數應該被設置爲零,以指示非規格化的結果。
+1「如果你需要問」。這就是那些詢問的人的答案不同的問題之一。 – gnasher729 2014-11-04 10:33:06
@ gnasher729我想知道3分鐘是否我想關閉爲「太寬泛」或回答,而我只是開始回答,因爲我不知道即使是簡單的方法會有多複雜。不過,如果是從一個開始並且對許多困難中的一個感到困惑的人來說,這將是一個很好的問題。 – 2014-11-04 10:35:50
- 1. 這個按位操作如何工作?
- 2. 按位操作的操作
- 3. 位域三元操作作爲左值
- 4. 如何解決操作欄上的操作菜單位置
- 5. java位操作
- 6. 位操作
- 7. 位C操作
- 8. 位操作?
- 9. 位操作AND
- 10. Numpy位操作
- 11. 位操作符
- 12. 有位操作
- 13. 位操作
- 14. 按位操作
- 15. 如何優化MATLAB位操作
- 16. 如何在Swift中使用位操作?
- 17. 如何操作Python中的位?
- 18. 如何反轉按位或操作?
- 19. 如何操作位圖中的像素?
- 20. 如何在glsl中執行位操作
- 21. 如何操作位彙編語言MIPS32
- 22. 操作欄操作項的位置
- 23. 位操作/操作計算器?
- 24. 將Delphi按位操作轉換爲Cobol
- 25. 位操作轉換爲整數
- 26. 如何將輸入作爲操作
- 27. 按位C操作
- 28. python按位操作
- 29. 位操作功能
- 30. ArrayDeque.allocateElements(按位操作)
你知道如何點浮點數來表示,如IEEE-754? – 2014-11-04 09:57:39
看:https://stackoverflow.com/questions/4743115/how-do-i-use-bitwise-operators-on-a-double-on-c – matekm 2014-11-04 09:59:09
@matekm這個問題是不同的。這個問題是關於實現浮點加法。 – 2014-11-04 10:00:50