当我将 math.NaN() 和 math.MaxFloat64 转换为 int 时

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结果不一样?


守候你守候我
浏览 100回答 1
1回答

翻过高山走不出你

规范:转换:在涉及浮点数或复数值的所有非常量转换中,如果结果类型不能表示转换成功的值,但结果值取决于实现。您将浮点值转换NaN为int. 类型的有效值int不包括NaN值,因此您转换的值不能由 type 的值表示int,因此结果取决于实现。基本上,规范允许它从一个版本到另一个版本、从一个平台到另一个平台进行更改。您不能(不应该)int为转换结果假定特定值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go