我正在写一篇关于浮点数的文章。我在Javascript控制台中尝试了一些简单的测试。
我正在寻找一个非交换加法的例子,即:(x + y)+ z!=(z + x)+ y
如果你有一些x y z的值,那就有效了。
答案 0 :(得分:4)
没有这样的例子,因为IEEE-754定义的浮点加法保证是可交换的。相关的措辞:
......每个操作都应该执行,好像它首先产生一个正确到无限精度和无界范围的中间结果,然后强制这个中间结果以适应目的地的格式。
即,添加本身以无限精度执行;结果中的所有错误都来自丢弃某些精度的需要。由于无限精度(即“常规”)加法是可交换的,这意味着整个操作是可交换的。
你可能想到的是相关性。浮点加法不是关联的,因为添加前两个数字后的精度损失通常与添加最后两个数字时的精度损失不同。最常见的例子称为“灾难性取消”:(1 + 1e100) + -1e100 = 0
和1 + (1e100 + -1e100) = 1
。
答案 1 :(得分:-4)
这很容易,当我们使用不是十进制值精确表示的浮点(大多数)时,大部分时间都会这样做。
即:
这可以在javascript控制台(F12)中键入并返回false
var x=0.1; var y=0.3; var z=0.00001; (x+y)+z==(z+x)+y