gpt4 book ai didi

c - 理解从整数到 float 的转换

转载 作者:太空狗 更新时间:2023-10-29 17:15:32 24 4
gpt4 key购买 nike

有人可以在 32 位机器上解释这个看起来很奇怪的输出吗?

#include <stdio.h>

int main() {
printf("16777217 as float is %.1f\n",(float)16777217);
printf("16777219 as float is %.1f\n",(float)16777219);

return 0;
}

输出

16777217 as float is 16777216.0
16777219 as float is 16777220.0

奇怪的是 16777217 转换为较低的值而 16777219 转换为较高的值...

最佳答案

在 IEEE-754 基本 32 位二进制浮点格式中,从 −16,777,216 到 +16,777,216 的所有整数都是可表示的。从 16,777,216 到 33,554,432,只能表示偶数。然后,从 33,554,432 到 67,108,864,只能表示四的倍数。 (由于这个问题不需要讨论哪些数字是可表示的,所以我将省略解释并认为这是理所当然的。)

最常见的默认舍入模式是将精确的数学结果舍入到最接近的可表示值,如果出现平局,则舍入到其尾数低位为零的可表示值。

16,777,217 在两个可表示值 16,777,216 和 16,777,218 之间是等距的。这些值表示为 1000000000000000000000002•21 和 1000000000000000000000012•21。前者的尾数低位为0,故选择结果。

16,777,219 在两个可表示值 16,777,218 和 16,777,220 之间是等距的。这些值表示为 1000000000000000000000012•21 和 1000000000000000000000102•21。后者的尾数低位为0,故选择它作为结果。

关于c - 理解从整数到 float 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319530/

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