gpt4 book ai didi

go - 浮点精度golang

转载 作者:行者123 更新时间:2023-12-01 22:17:39 26 4
gpt4 key购买 nike

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

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

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

谢谢

最佳答案

这与未键入的constants有关。未类型化的浮点常量可以保存的精度比类型化的float64常量高得多。

因此,在第二行中,在类型化常量表达式中,乘法产生的浮点数的精度比第一行中未类型化常量表达式中的乘法精度小得多。

实现限制:尽管数字常量具有任意值
语言的精确度,编译器可以使用
内部表示,精度有限。也就是说,每个
实施必须:


  • 表示至少具有256位的整数常量。
  • 表示浮点常量,包括复数常量的部分,尾数至少为256位,带符号的二进制指数至少为16位。
  • 如果无法精确表示整数常量,则给出错误。
  • 如果由于溢出而无法表示浮点数或复数常量,则给出错误。
    如果由于精度限制而无法表示浮点数或复数常数,则四舍五入到最接近的可表示常数。


  • 参见相关: https://stackoverflow.com/a/57512022/965900

    关于go - 浮点精度golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403028/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com