为了账号安全,请及时绑定邮箱和手机立即绑定

golang浮点精度

golang浮点精度

Go
慕少森 2023-07-31 14:57:43
很好奇为什么以下会产生两个不同的值。    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 位。

  • 如果无法精确表示整数常量,则给出错误。

  • 如果由于溢出而无法表示浮点或复数常量,则给出错误。如果由于精度限制而无法表示浮点或复数常量,则舍入到最接近的可表示常量。

查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信