为什么在 Golang 中将 1.0/3.0 数字字面量相加 3 次计算结果恰好为 1?

Why does adding 1.0/3.0 numeric literal three times evaluates to exactly 1 in Golang?

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

在Golang中执行下面这行代码结果变成1

fmt.Println(1.0/3.0 + 1.0/3.0 + 1.0/3.0)

据我所知,1.0/3.0 结果为 0.3333333... 无法准确存储,请问是什么原因造成的。

我不熟悉处理器或 CPU 如何执行特定指令等低级内容。谁能给我一个简单的答案?

根据The Go Programming Language Specification,“常量表达式总是准确求值……”这意味着编译器(或其他实现)需要在求值常量所需的范围内进行完整的real-number算术运算表达。因此1.0/3.0 + 1.0/3.0 + 1.0/3.0被计算为⅓+⅓+⅓,当然是1.