Ama*_*tam 4 c precision math.h double-precision
我正在编写一个程序,其中我需要以非常高的精度(大约10^-10)存储数字,然后进一步使用它们作为参数(create_bloomfilter ([yet to decide the type] falsePositivity, long expected_num_of_elem))。
我能够获得的最高精度是double(周围的东西10^-6)这还不够。
我们如何在 c 中以更高的精度存储数字?
你被误导了double。
您可以在 a 中存储的最小正数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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
2e-308 = 2e-308 2 * pow(10, -308) = 2e-308 10^-7 = -13
请注意,浮点数有很多问题。