gpt4 book ai didi

将命令行 arg 转换为 double 无法通过 C 中的逻辑检查

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

我正在 Linux 机器上编写 C 程序。我正在尝试将命令行参数转换为 double ,然后检查该数字是否大于 MAX_K。如果它更大,我希望程序退出,但它没有。例如,我将 MAX_K 设置为 10^18 然后输入 1000000000000000001 作为参数,如果它大于 1000000000000000000 那么我希望程序退出,否则打印“OK”,但程序不会退出但打印“OK ”。我尝试在程序中将 MAX_K 定义为 double,结果相同。我不明白为什么程序没有退出,因为 1000000000000000001 > 1000000000000000000.
这是我的代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX_K 1000000000000000000

int main(int argc, char *argv[]) {

// double MAX_K = 1000000000000000000;

double K;

if (argc != 2) {
exit(1);
}

K = strtod(argv[1], NULL);

if (K > MAX_K) {
exit(1);
}

printf("OK\n");

return 0;
}

最佳答案

strtod() 返回可由输入字符串表示的最接近的 double

鉴于 double 的有限精度,“1000000000000000000”和“1000000000000000001”等输入通常都会转换为相同的 double

因此,尽管输入了“1000000000000000001”,K 的值为 1000000000000000000,并且没有通过极限测试。

这是精度问题,不是范围问题。可以输入像“10000(总共 300 个零)000”这样的 double 值,strtod() 将转换为最接近的 double,这将在前 15 个 * * 十进制数字。

** 根据规范,DBL_DIG 至少 10

关于将命令行 arg 转换为 double 无法通过 C 中的逻辑检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26042206/

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