很好奇为什么以下会产生两个不同的值。 fmt.Println(51.231576 * math.Pi / 180) // 0.8941596821857065
fmt.Println(float64(51.231576) * math.Pi / 180) //0.8941596821857064我知道这是微小的差异,但想了解原因。谢谢
1 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
这与无类型 常量有关。无类型浮点常量可以比类型 常量保存精度更高的值float64
。
因此,在第二行,在类型化常量表达式中,乘法产生的浮点数的精度远小于第一行非类型化常量表达式中的乘法。
实现限制:尽管数字常量在语言中具有任意精度,但编译器可以使用精度有限的内部表示来实现它们。也就是说,每个实施都必须:
表示至少 256 位的整数常量。
表示浮点常量,包括复数常量的部分,尾数至少为 256 位,带符号二进制指数至少为 16 位。
如果无法精确表示整数常量,则给出错误。
如果由于溢出而无法表示浮点或复数常量,则给出错误。如果由于精度限制而无法表示浮点或复数常量,则舍入到最接近的可表示常量。
- 1 回答
- 0 关注
- 123 浏览
添加回答
举报
0/150
提交
取消