【问题标题】:Why does adding 1.0/3.0 numeric literal three times evaluates to exactly 1 in Golang?为什么在 Golang 中添加 1.0/3.0 数字文字三次等于 1?
【发布时间】:2023-04-10 01:10:01
【问题描述】:

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

在 Golang 中执行以下代码行结果为 1

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

据我所知,1.0/3.0 的结果是 0.3333333...无法准确存储,那么是什么原因导致了这个结果。

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

【问题讨论】:

标签: go floating-point cpu floating-accuracy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 2014-02-16
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2017-08-08
    • 2019-06-06
    相关资源
    最近更新 更多