为什么在Golang中,将1.0/3.0数值文本添加三次计算结果正好是1?

为什么在Golang中,将1.0/3.0数值文本添加三次计算结果正好是1?,go,floating-point,cpu,floating-accuracy,Go,Floating Point,Cpu,Floating Accuracy,对于像我这样的初学者来说,StackOverflow的答案非常复杂 在Golang中执行以下代码行将导致1 fmt.Println(1.0/3.0 + 1.0/3.0 + 1.0/3.0) 据我所知,1.0/3.0的结果是0.3333。。。无法准确存储的数据,则是什么导致了此结果 我不熟悉诸如处理器或CPU如何执行特定指令之类的低级事物。有人能给我一个简单的答案吗?根据“常量表达式总是精确地计算…”这意味着编译器(或其他实现)需要在计算常量表达式所需的范围内进行全实数运算。因此1.0/3.0+

对于像我这样的初学者来说,StackOverflow的答案非常复杂

在Golang中执行以下代码行将导致1

fmt.Println(1.0/3.0 + 1.0/3.0 + 1.0/3.0)
据我所知,1.0/3.0的结果是0.3333。。。无法准确存储的数据,则是什么导致了此结果

我不熟悉诸如处理器或CPU如何执行特定指令之类的低级事物。有人能给我一个简单的答案吗?

根据“常量表达式总是精确地计算…”这意味着编译器(或其他实现)需要在计算常量表达式所需的范围内进行全实数运算。因此
1.0/3.0+1.0/3.0+1.0/3.0
被评估为⅓ + ⅓ + ⅓, 当然是1