我遇到了一个小问题。我试图找出一个数字的倒数是否包含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);
}
最佳答案
格式化printf
不是这里的问题。这就是数据类型。
C语言中的浮点数使用IEEE754编码。
这种编码使用符号、有效位和指数。
由于这种编码,许多数字将有小的变化,以允许他们存储。此外,有效数字的数目可以稍微改变,因为它是二进制表示,而不是十进制表示。
单精度(float
)提供23位有效位、8位指数位和1位符号位。
双精度(double
)提供52位有效位、11位指数位和1位符号位。
可以存储在一个double中的最小正数约为2⨯10-308,不包括非规范化的数字,后者可以更小。它们的精度相当于大约15-17位数字,这足以测量地球直径到人体最小的红细胞大小。
因此,您需要一个大数字库来处理您的问题。
我建议HPALIB因为它是解决问题的简单工具。请注意,这么大的数字会占用很多内存。
关于c - C中的最大小数位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52002105/