2017-08-29 40 views
0

在Node.js中,是否有像Number.MAX_SAFE_INTEGER這樣的最大安全浮點數?Node.js最大安全浮點數

我做了一個小實驗,找出(約數),我可以使用數值減去0.13:

console.log(Math.floor(Number.MAX_SAFE_INTEGER)); // 9007199254740991 
console.log(Math.floor(Number.MAX_SAFE_INTEGER)-0.13); // 9007199254740991 

console.log(Math.floor(Number.MAX_SAFE_INTEGER/2)); // 4503599627370495 
console.log(Math.floor(Number.MAX_SAFE_INTEGER/2)-0.13); // 4503599627370495 

console.log(Math.floor(Number.MAX_SAFE_INTEGER/4)); // 2251799813685247 
console.log(Math.floor(Number.MAX_SAFE_INTEGER/4)-0.13); // 2251799813685246.8 

console.log(Math.floor(Number.MAX_SAFE_INTEGER/64)); // 140737488355327 
console.log(Math.floor(Number.MAX_SAFE_INTEGER/64)-0.13); // 140737488355326.88 

console.log(Math.floor(Number.MAX_SAFE_INTEGER/128)); // 70368744177663 
console.log(Math.floor(Number.MAX_SAFE_INTEGER/128)-0.13); // 70368744177662.87 

我的猜測是,作爲目標精度增加,最大值減小。

+0

您可以隨時查閱規格;它可能會比輸入這個問題花費更少的時間。 – Pointy

+0

如果你通過「安全」解釋你的意思,這也會很有幫助。對於整數值來說,這是相當明顯的,但對於實數來說並不那麼明顯。 – Pointy

回答

1

更新:我對此問題的理解是:是否存在最大浮點數,介於0和0之間,所有浮點數操作都可以安全地傳遞。

如果是這樣的問題,簡短的回答是:沒有

其實,有在所有的編程語言沒有MAX_SAFE_FLOAT(會很高興,如果有一個)。編程語言中的數字通過01位存儲。只要存儲空間有限制(32位,64位等),可以表示的數字就是有限的。但是,浮點數是無限的。

考慮00.000000001之間的浮點數,需要表示多少個數字?無窮。讓計算機準確無誤地存儲無限的可能性是不可能的。這就是爲什麼永遠不會有MAX_SAFE_FLOAT。

p.s.在JavaScript中,所有數字都是64位雙精度浮點數。沒有浮動數字v.s. JavaScript中的整數。

+1

這是錯的。可表示浮點數的數量肯定是**不是**「無限」。只涉及64位;它怎麼可能是無限的? – Pointy

+0

@點我不是指可表示的浮動數字,我的意思是浮動數字,需要準確表示。 – shaochuancs

+1

這仍然是錯誤的。 – Pointy

0

您正在尋找Number.MAX_VALUENumber.MIN_VALUE

Number.MAX_VALUE1.7976931348623157e+308Number.MIN_VALUE5e-324

+0

請注意,OP要求最大的「安全」浮動號碼。我想他/她想要的是安全範圍,就像Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER之間的範圍 – shaochuancs

+0

@shaochuancs,但這並不真正有效,因爲實數的表示在*從未*「安全」感覺整數表示可以被稱爲「安全」。 – Pointy

+0

是的,我知道要求「安全」的浮動號碼沒什麼意義。但請看看5「減0.13」的操作,似乎OP試圖找到最大的安全數,當「減0.13」時仍然給出正確的結果。他還提到「隨着目標精度的提高,最大值下降」,似乎他猜測何時「減去0.1312134543124321512」,那麼最大的安全數字會更小。 – shaochuancs