go - 为什么在Golang中将1.0/3.0数字文字三倍相加得出恰好为1?

标签 go floating-point cpu floating-accuracy

对于像我这样的初学者来说,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如何执行特定指令之类的低级知识。谁能给我一个简单的答案?

最佳答案

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

关于go - 为什么在Golang中将1.0/3.0数字文字三倍相加得出恰好为1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63471137/

相关文章:

arrays - 如何在数组Golang中查找非重复项

go - 尝试生成唯一的int64时生成负数的代码

go - 获取绑定(bind) : address already in use even after closing the connection in golang

ios - 将 NSString 转换为 Float - 添加到小数位?

math - 浮点算术四舍五入到最接近的值

java - Java 的更多核心 VS 更高频率

node.js - 未充分利用的 CPU 是否可以进行 CPU 阻塞?

go - Datadog 中的自定义延迟指标

c++ - GCC -Wconversion 与否定一起发出警告,但不会发出其他警告

c - 用于 CPU 使用的 Linux C API