簡體   English   中英

Javascript:這是真正簽名的整數除法嗎

[英]Javascript: Is This Truly Signed Integer Division

給定以下代碼,其中ab均為Number表示有符號32位有符號整數范圍內的值:

var quotient = ((a|0) / (b|0))|0;

並假設運行時完全符合ECMAScript 6規范, quotient的值將始終ab作為整數的正確有符號整數除法嗎? 換句話說,這是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM