Javascript 在哪一点上比较一个;整数;及;浮动;等于'true`?

Javascript 在哪一点上比较一个;整数;及;浮动;等于'true`?,javascript,floating-point,precision,Javascript,Floating Point,Precision,我了解和了解 我知道Number.MAX\u SAFE\u INTEGER+1==Number.MAX\u SAFE\u INTEGER+2等于true 但我最近才意识到: var编号=2007199254740991; var浮动=2007199254740991.123; console.log(number==float); //=>true没有这样的事情,因为Javascript数字的精度或有效数字(实际上)有限 const n1=1e-10; 常数n2=1e-30; console

我了解和了解

我知道
Number.MAX\u SAFE\u INTEGER+1==Number.MAX\u SAFE\u INTEGER+2
等于true

但我最近才意识到:

var编号=2007199254740991;
var浮动=2007199254740991.123;
console.log(number==float);

//=>true
没有这样的事情,因为Javascript数字的精度或有效数字(实际上)有限

const n1=1e-10;
常数n2=1e-30;

console.log(n1-n2==n1)没有这样的事情,因为Javascript数字的精度或有效数字(实际上)有限

const n1=1e-10;
常数n2=1e-30;
console.log(n1-n2==n1)在JavaScript中找不到“最大安全浮动”。它根本不存在

@当然性能是正确的,JS的精确度有限。此外,请记住,编程语言中的数字是由0或1位存储的,并且请记住,您可以有无限的小数,所以。。。你能有无限的0和1吗

因为任何计算机都可以存储无限个数字,所以没有最大安全浮点数。

在JavaScript中找不到“最大安全浮点数”。它根本不存在

@当然性能是正确的,JS的精确度有限。此外,请记住,编程语言中的数字是由0或1位存储的,并且请记住,您可以有无限的小数,所以。。。你能有无限的0和1吗


因为任何计算机都可以存储无限个数字,所以没有最大安全浮点数。

当比较失败时询问是错误的问题。比较两个数字总是正确的;当且仅当所比较的两个数字具有相同的值时,其计算结果为true

问题实际上发生在早期的操作中。将源代码中的数字转换为
数字
、添加数字和其他操作会在将精确的实数数学值四舍五入为可用浮点表示的值时引入错误

JavaScript使用IEEE-754 binary64,它有53位有效位(浮点数的小数部分)。这意味着任何大小为252或更大的数字都没有任何可以表示小于1的值的位——它们没有分数部分。因此,当任何252或更大的数字转换为JavaScript
数字时,结果是一个整数

但较小的数字也是四舍五入的。从251到252,可用的最低有效位表示2−1或½。因此,此区间中转换为
数字的任何数字必须生成整数或整数加½。这意味着一些数字,如2251799813685248.6,将产生非整数(2251799813685248.5),而另一些数字,如2251799813685248.8将产生整数(2251799813685249


在252以下的每个量级上,有些数字在转换为
Number
时将四舍五入为整数,有些数字将不四舍五入为整数。(在252以上,所有数字都四舍五入为整数。)在较小的量级上,只有接近整数的数字才会四舍五入为整数。随着量级的减小,格式变得更加“敏感”。在比较失败时询问是错误的问题。比较两个数字总是正确的;当且仅当所比较的两个数字具有相同的值时,其计算结果为true

问题实际上发生在早期的操作中。将源代码中的数字转换为
数字
、添加数字和其他操作会在将精确的实数数学值四舍五入为可用浮点表示的值时引入错误

JavaScript使用IEEE-754 binary64,它有53位有效位(浮点数的小数部分)。这意味着任何大小为252或更大的数字都没有任何可以表示小于1的值的位——它们没有分数部分。因此,当任何252或更大的数字转换为JavaScript
数字时,结果是一个整数

但较小的数字也是四舍五入的。从251到252,可用的最低有效位表示2−1或½。因此,此区间中转换为
数字的任何数字必须生成整数或整数加½。这意味着一些数字,如2251799813685248.6,将产生非整数(2251799813685248.5),而另一些数字,如2251799813685248.8将产生整数(2251799813685249


在252以下的每个量级上,有些数字在转换为
Number
时将四舍五入为整数,有些数字将不四舍五入为整数。(在252以上,所有数字都四舍五入为整数。)在较小的量级上,只有接近整数的数字才四舍五入为整数,格式变得更“敏感”随着幅度的减小。

JS中没有浮点数和整数-每个数字都由IEEE 754浮点数表示。JS中没有浮点数和整数-每个数字都由IEEE 754浮点数表示。我们能找到在什么时候表示变得“不精确”吗,在1和下一个不同数字之间有一个最小可表示值@我认为任何不能用二进制准确表示的数字都是不可信的。例如,
0.5
0.25
0.125
0.625
的数学运算都是围绕相同数量级进行的,因为它们可以完美地用二进制表示,但任何其他十进制数都不是。@CertainPerformance-
0.5
就是
2^-1
,因为它是二的幂,它可以很容易地用位表示。与
0.25
2^-2
)和
0.125的想法相同