登录
首页 >  Golang >  Go问答

go1.14.2 和 go1.17.2 在将 math.NaN() 和 math.MaxFloat64 转换为 int 时,为什么会得到不同的结果?

来源:stackoverflow

时间:2024-02-08 13:03:27 432浏览 收藏

一分耕耘,一分收获!既然都打开这篇《go1.14.2 和 go1.17.2 在将 math.NaN() 和 math.MaxFloat64 转换为 int 时,为什么会得到不同的结果?》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

package main

import (
    "fmt"
    "math"
)

func main() {
    x, y := math.nan(), math.maxfloat64
    fmt.printf("%d\n", int(x))
    fmt.printf("%d\n", int(y))
}

这是我的测试代码片段。当我使用go1.14.2运行上面的代码时,结果是

-9223372036854775808
-9223372036854775808

但是同样的代码在go1.17.2中运行,结果是

0
9223372036854775807

我搜索了类似的问题:why is uint64 of nan and maxfloat64 equal in golang?,它说在不同的硬件环境中,math.nan()可能不同,但我在我的macos m1系统中运行了代码,只是golang版本不同。为什么go1.14.2和go1.17.2的结果不同?


正确答案


Spec: Conversions:

在涉及浮点或复数值的所有非常量转换中,如果结果类型无法表示该值,则转换会成功,但结果值取决于实现。

将浮点值 NaN 转换为 intint 类型的有效值不包括 NaN 值,因此您转换的值不能由 int 类型的值表示,因此结果取决于实现。基本上,规范允许它在不同版本、不同平台之间进行更改。您不能(不应该)为转换结果假设特定的 int 值。

到这里,我们也就讲完了《go1.14.2 和 go1.17.2 在将 math.NaN() 和 math.MaxFloat64 转换为 int 时,为什么会得到不同的结果?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>