C中的最大小数位数

问题描述 投票:0回答:1

我遇到了一个小问题。我试图找出数字的倒数是否包含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);
}
c floating-point decimal
1个回答
2
投票

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

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

由于这种编码,许多数字将有很小的变化,以允许它们存储。此外,有效位数可以稍微改变,因为它是二进制表示,而不是十进制表示。

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

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

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

我建议使用HPALIB,因为它是解决问题的简单工具。请小心那个大的数字会占用大量的内存。

© www.soinside.com 2019 - 2024. All rights reserved.