gpt4 book ai didi

c - c 中的不等式不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:51 25 4
gpt4 key购买 nike

我正在学习 c,我很困惑,因为我的代码似乎将 ( 1e16 - 1 >= 1e16 ) 评估为 true 而它应该为 false。我的代码在下面,它返回

9999999999999999 INVALIDBIG\n

当我期望它不会返回任何东西时。我认为使用 long long 可以避免任何大数问题。

int main(void)
{
long long z;

z = 9999999999999999;

if ( z >= 1e16 || z < 0 )
{
printf("%lli INVALIDBIG\n",z);
}
}

最佳答案

1e16 是 double 类型的字面值, float / double 对于十进制算术/比较可能不精确(只是许多常见示例之一:十进制 0.2)。它会将 long-long z 向上转换为 double 以进行比较,我猜标准的 double 表示无法存储所需的精度(也许其他人可以演示二进制尾数/符号表示)

尝试将 1e16 更改为 (long double)1e16,然后它不会打印出您的消息。 (更新:或者,正如其他问题评论者所添加的那样,将 1e16 更改为整数文字)

关于c - c 中的不等式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129541/

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