Javascript 对于大小相同但符号相反的两个浮点数,它们的绝对值是否完全相等?

Javascript 对于大小相同但符号相反的两个浮点数,它们的绝对值是否完全相等?,javascript,floating-point,Javascript,Floating Point,例如: var a=x.yz; var b=-x.yz; 在他们四舍五入到“error”值之后,-a是否正好等于b 或者它会舍入不同的值,如Math.round(2.5)和Math.round(-2.5)? 正如文档所述,Math.random(float)将舍入到正无穷大,这将帮助您理解为什么Math.round(2.5)和Math.round(-2.5)返回不同的值。因此,在您的例子中-(-a)实际上将被四舍五入为+a。如果数字的有效小数位数不超过20位,则转换带有-的数字和不带-的数字的

例如:

var a=x.yz;
var b=-x.yz;
在他们四舍五入到“error”值之后,-a是否正好等于b

或者它会舍入不同的值,如Math.round(2.5)和Math.round(-2.5)?


正如文档所述,Math.random(float)将舍入到正无穷大,这将帮助您理解为什么Math.round(2.5)和Math.round(-2.5)返回不同的值。因此,在您的例子中-(-a)实际上将被四舍五入为+a。

如果数字的有效小数位数不超过20位,则转换带有
-
的数字和不带
-
的数字的结果除符号外完全相同

JavaScript是ECMAScript的实现,在和ISO/IEC 16262中指定。Ecma-262指定使用IEEE-754 64位二进制浮点格式,但存在单个NaN值的情况除外

第7.1.3.1条规定了如何将字符串(包含数字,如
1.2345
)转换为数字。除非该数字是具有超过20个有效数字的十进制数字,否则应按照第6.1.6条的规定进行转换,该条规定了与IEEE-754的“四舍五入到最接近的偶数”方法相对应的四舍五入规则。该方法在符号方面是对称的,因此将数字的否定转换为JavaScript数字的结果等于将数字转换为数字的结果的否定


如果数字的有效小数位数超过20位,则第7.1.3.1条允许实现使用距离源数字最近的两个20位数字中的任意一个。该文档没有对这种选择提出进一步的要求,因此在这种情况下,JavaScript实现在签名方面的行为可能是不对称的。但是,这样做是一个糟糕的实现选择。

为什么不测试它?现在你的编辑让问题变得更糟:
a=n;b=-n-a=-n=b
@GerardoFurtado:测试有限数量的案例并不能回答所有可能案例的问题。@EricPostphil我不知道你在说什么:小提琴在OP编辑之前复制OP提出的问题。@GerardoFurtado:即使在编辑之前,这个问题也会问一个关于数字的一般性问题,如标题所述。问题正文中给出的具体数字就是一个例子。它被明确标记为一个例子。OP不仅对这一个示例数字的行为感兴趣,而且对所有可能的数字都感兴趣。测试一个案例并不能回答所有数字的问题。