[英]Javascript: Is This Truly Signed Integer Division
給定以下代碼,其中a
和b
均為Number
表示有符號32位有符號整數范圍內的值:
var quotient = ((a|0) / (b|0))|0;
並假設運行時完全符合ECMAScript 6規范, quotient
的值將始終是a
和b
作為整數的正確有符號整數除法嗎? 換句話說,這是在JavaScript中實現與機器指令等效的真正有符號整數除法的正確方法嗎?
我不是浮點數專家,但Wikipedia表示,雙精度數具有52位精度。 從邏輯上講,看來52位應該足以可靠地近似32位整數的整數除法。
將最小和最大32位有符號整數-2147483648 / 2147483647
會產生-1.0000000004656613
,這仍然是一個合理數量的有效數字。 其逆2147483647 / -2147483648
,其產生-0.9999999995343387
。
除以零是一個例外,我在評論中提到過。 如鏈接的SO問題所述,整數除以零通常會引發某種錯誤,而浮點強制會導致(1 / 0) | 0 == 0
1/0 (1 / 0) | 0 == 0
(1 / 0) | 0 == 0
。
更新:根據另一個SO答案 ,C中的整數除法將截斷為零,這就是JavaScript中|0
作用。 另外,除數0是不確定的,因此從技術上講,JavaScript在返回零方面不是不正確的。 除非我沒有其他任何遺漏,否則原始問題的答案應該是。
更新2: ECMAScript 6規范的相關部分:如何對數字進行除法以及如何將其轉換為32位帶符號整數 , |0
就是這樣做的 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.