[英]-0 in JavaScript after using Math.round? What is -0?
我只想生成范圍<-1,1>
隨機整數,即-1,0或1.我認為這段代碼指出:
Math.round(Math.random()*2-1)
但是除了-1,0和1之外我還有一個價值。我不確定那應該是什么:
現在我不認為這是實現錯誤,但如果是,我正在使用Firefox 41,同樣的事情發生在Google Chrome 39.當我嘗試在控制台中記錄-0
,它顯示為-0
但-0
轉換為String
顯示為"0"
。 它是什么? 我可以將它用於某些東西,比如一些很酷的編程黑客和解決方法嗎? 如果我不忽略它會導致一些錯誤嗎?
兩個零
因為JavaScript的數字保持大小和符號分開,所以每個非負數都有一個負數,包括0.這個的基本原理是每當你用數字表示數字時,它就會變得很小,以至於它與0無法區分,因為編碼不精確足以代表差異。 然后有符號的零允許您記錄“從哪個方向”接近零; 也就是說,數字在被認為是零之前的標志是什么。
從這里開始
如果您有興趣,請提供更多技術資料
IEEE作為IEEE 754標准的一部分於1985年引入-0和+0的實現。 該標准解決了在各種浮點實現中發現的許多問題 ,這些問題使得它們難以可靠且可移植地使用。
標准定義
ECMAScript有兩個零數: +0
和-0
。
大多數比較算法認為它們是相同的:
+0 == -0 // true (Equality comparison)
+0 === -0 // true (StrictEquality comparison)
[+0].includes(-0) // true (SameValueZero comparison)
但是,它們的數值不同:
Object.is(+0, -0) // false (SameValue comparison)
通常,兩個零在數學計算中表現相同。 然而,
1 / +0 === +Infinity
1 / -0 === -Infinity
在這種情況下,您得到-0
因為Math.round
定義如下:
如果x小於0但大於或等於-0.5,則結果為-0。
一般情況下,如果你有一個介於-2 31和2 31 -1之間的整數,並且你想將它轉換為+0
如果它是-0
,否則不要改變它,你可以使用按位OR:
-1 | 0 // -1
-0 | 0 // +0
+0 | 0 // +0
+1 | 0 // +1
但是,在您的情況下,您可以在Math.round
之外取-1
:
Math.round(Math.random()*2) - 1
但是使用Math.round
注意會產生非均勻的概率分布。 考慮使用
Math.floor(Math.random()*3) - 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.