gpt4 book ai didi

go - 将float转换为int时的Golang怪异行为

转载 作者:行者123 更新时间:2023-12-03 10:10:09 28 4
gpt4 key购买 nike

我在golang中有以下代码:

var fnum float32 = 99999999;
var inum int32 = int32(fnum);
fmt.Println(inum); // This prints out 100000000
为什么将99999999更改为100000000?
我认为我没有超出float32和int32的限制,所以不确定为什么会这样。

最佳答案

(IEEE 754) 32-bit float以以下形式表示实数值

value = (−1)^sign × 2^e × (1 + 2^−1 b[22] + 2^−2 b[21] + ... + 2^−23 b[0])
其中“e”是介于-126到+127之间的整数指数,“b [22],...,b [0]”组成有效位。
显然,这种表示形式是有限的,并不是所有的实数都可以精确表示。对于整数,不能完全表示为float32的最小整数是2 ^ 24 + 1 =16777217。特别是在这一点上,指数因子是2 ^ 24,但是最小有效项是2 ^ −23 b [ 0],则无法精确表示2 ^ 24以上的奇数整数(值%2)≠0。
类似地,对于值99999999,指数因子为2 ^ 26,且2 ^ 26以上且(值%8)≠0的整数不能精确表示。最接近可表示的float32值到99999999是99999992和100000000。

关于go - 将float转换为int时的Golang怪异行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65417925/

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