gpt4 book ai didi

c - 在 C 中以更高的精度存储数字

转载 作者:行者123 更新时间:2023-12-03 19:59:36 25 4
gpt4 key购买 nike

我正在编写一个程序,其中我需要以非常高的精度(大约 10^-10 )存储数字,然后进一步使用它们作为参数( create_bloomfilter ([yet to decide the type] falsePositivity, long expected_num_of_elem) )。
我能够获得的最高精度是 double (大约 10^-6 )这还不够。

我们如何在 c 中以更高的精度存储数字?

最佳答案

您被误导了 double .

您可以存储在 double 中的最小正数大约是 2⨯10-308,不包括非规范化数字,可以更小。非正规数下降到 5⨯10-324。它们具有相当于约 15-17 位数的精度,足以测量地球的直径,达到人体最小的红细胞大小的范围内。

如果您确实需要更高的精度,则需要 MPFR。 (如果您的算法在数值上不稳定,MPFR 可能无济于事。)

编辑:我发现你做错了什么。

在 C 中,10^-7是一个整数表达式。在大多数系统上它应该等于 -13。 ^运算符是按位异或运算符,不是 求幂运算符。 C 中没有取幂运算符,因为 C 运算符通常对应更原始的操作,至少在硬件实现方面是这样。

你要1e-7 , 或 pow(10, -7) .

#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
printf("2e-308 = %g\n", 2e-308);
printf("2 * pow(10, -308) = %g\n", 2 * pow(10, -308));
printf("10^-7 = %d\n", 10^-7);
return 0;
}

输出:

2e-308 = 2e-308
2 * pow(10, -308) = 2e-308
10^-7 = -13

请注意,浮点数有很多问题。

关于c - 在 C 中以更高的精度存储数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114548/

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