2017-08-29 44 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