C中的最大小数位数

时间:2018-08-24 10:05:02

标签: c floating-point decimal

我遇到了一个小问题。我正在尝试查找数字的倒数是否包含C中的数字。但是,我无法通过使用float或double来打印超过15个小数位的倒数。我该怎么做才能拥有尽可能多的小数位(例如超过100 ++)?

解决方案:

char output[10000];
void divide(int a, int b, char *c, int d)
{
    if (d == 10000)
        return;
    int e = a/b;
    int f = (a%b)*10;
    if(d>=1)
        c[d+1] = e + '0';
    divide(f, b, c, d+1);
}

1 个答案:

答案 0 :(得分:2)

格式化printf并不是这里的问题。这就是数据类型。 C中的浮点数使用IEEE 754编码。

这种编码使用符号,有效数和指数。

由于采用了这种编码方式,因此许多数字都会有很小的变化以允许存储它们。另外,由于有效位数是二进制表示形式,而不是十进制表示形式,因此有效位数可以稍有变化。

单精度(float)为您提供23位有效数,8位指数和1个符号位。
双精度(double)为您提供52位有效数,11位指数和1个符号位。

可以存储在双精度数中的最小正数约为2×10-308,不包括非规范化数,后者可能会更小。它们具有大约15-17位数的精度,足以测量地球的直径,使之处于人体最小的红细胞之内。

因此,您需要一个大数字库来解决您的问题。

我建议使用HPALIB,因为它是解决问题的简单工具。请注意,这么大的数字会占用大量内存。