Scala 3个浮点加起来等于1.0和0.0,具体取决于括号

Scala 3个浮点加起来等于1.0和0.0,具体取决于括号,scala,floating-point,Scala,Floating Point,我刚刚学习了浮点数,很难理解如何找到3个双精度值(比如a、b和c),因此: (a+b)+c==1.0和a+(b+c)==0.0 我读过好几个网页,看了一些关于什么是浮点的视频,但我不知道该如何找到这样的东西。我尝试了不同的数字,但结果的差异很小。e、 g (1.1-0.2)+0.1=1.0000000000000002 1.1+(-0.2+0.1)=1.0在一般情况下,您只能将浮动操作的结果与您信任的误差幅度进行比较 例如,使用库: 如果你不想这样,你需要使用BigDecimal精确数学。请看这

我刚刚学习了浮点数,很难理解如何找到3个双精度值(比如a、b和c),因此:

(a+b)+c==1.0和a+(b+c)==0.0

我读过好几个网页,看了一些关于什么是浮点的视频,但我不知道该如何找到这样的东西。我尝试了不同的数字,但结果的差异很小。e、 g

(1.1-0.2)+0.1=1.0000000000000002


1.1+(-0.2+0.1)=1.0在一般情况下,您只能将浮动操作的结果与您信任的误差幅度进行比较

例如,使用库:


如果你不想这样,你需要使用
BigDecimal
精确数学。

请看这里:你应该瞄准0而不是0。例如,
(1.1-0.2)-0.9
。现在,如果你把所有的数字都变大会发生什么呢?一个关键的想法是相邻浮点数之间的间距会随着大小的增加而增加。它可以是如此之大,以至于在一个数字上加1不会改变它的值,因为原始数字是最接近精确结果的可表示数字。谢谢!我通过对a和b使用一个大数字,对c使用一个小数字来计算得出。完全可以选择a、b和c,这样
(a+b)+c
正好是1.0,
a+(b+c)
正好是0。
import orc.scalactic.TripleEquals._
import orc.scalactic.Tolerance._

(1.1 -   0.2) + 0.1  === 1.0 +- 1.0e-6  // true
 1.1 + (-0.2  + 0.1) === 1.0 +- 1.0e-6  // true