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

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

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

Go
守候你守候我 2022-12-05 16:58:48
package mainimport (    "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中运行,结果是09223372036854775807我搜索了类似的问题:Why Is uint64 of NaN and MaxFloat64 equal in Golang? ,上面说在不同的硬件环境下,math.NaN() 可能不同,但是我在我的 MacOS M1 系统中运行代码,只是 golang 版本不同。为什么go1.14.2和go1.17.2结果不一样?
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

规范:转换:

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

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


查看完整回答
反对 回复 2022-12-05
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号