gpt4 book ai didi

c - c 中要加倍的数字字符串

转载 作者:行者123 更新时间:2023-11-30 14:47:24 24 4
gpt4 key购买 nike

我正在尝试将 c 中的简单字符串转换为 double 字符串:

 double n;
sscanf_s(str, "%lf", &n);
printf("%lf", n);

考虑到:

const char *str[] = {"37107287533902102798797998220837590246510135740250"};

当我尝试打印 n 时,直到第 16 位数字都很好。输出是这样的:

371072875339021043110257403....

可能是什么问题?

最佳答案

2个问题:

sscanf_s(str, "%lf", &n); 需要一个 char *,而不是 char **。启用所有编译器警告以查看此类问题,并确保正确剪切/粘贴问题。

const char *str[] = {"37107287533902102798797998220837590246510135740250"};  

您的意思是以下内容吗?

const char *str = {"37107287533902102798797998220837590246510135740250"};
<小时/>

double 通常可以准确编码大约 264 个不同的值,因为 double 通常是 64-一点数据。
37107287533902 102798797998220837590246510135740250不是其中之一。

像下面这样的输出是合理的:
37107287533902 1043110257403....

37107287533902 104311025740304689820495323650000000.0是最接近的可表示的double

37107287533902 099118728881769862191964827320000000.0将是下一个最佳选择。

请注意,在此范围内,精确 double 相距 2112(约 5.2*1033)。这就是大多数double编码的二进制性质。

关于c - c 中要加倍的数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297021/

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