golang浮点精度

很好奇为什么以下会产生两个不同的值。

    fmt.Println(51.231576 * math.Pi / 180) // 0.8941596821857065
    fmt.Println(float64(51.231576) * math.Pi / 180) //0.8941596821857064

我知道这是微小的差异,但想了解原因。

谢谢


慕少森
浏览 124回答 1
1回答

叮当猫咪

这与无类型 常量有关。无类型浮点常量可以比类型 常量保存精度更高的值float64。因此,在第二行,在类型化常量表达式中,乘法产生的浮点数的精度远小于第一行非类型化常量表达式中的乘法。实现限制:尽管数字常量在语言中具有任意精度,但编译器可以使用精度有限的内部表示来实现它们。也就是说,每个实施都必须:表示至少 256 位的整数常量。表示浮点常量,包括复数常量的部分,尾数至少为 256 位,带符号二进制指数至少为 16 位。如果无法精确表示整数常量,则给出错误。如果由于溢出而无法表示浮点或复数常量,则给出错误。如果由于精度限制而无法表示浮点或复数常量,则舍入到最接近的可表示常量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go