c - C中的最大小数位数

标签 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);
}

最佳答案

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

这种类型的编码使用符号、尾数和指数。

由于这种编码,许多数字都会有小的变化以允许它们被存储。此外,有效数字的数量可能会略有变化,因为它是二进制表示,而不是十进制。

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

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

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

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

关于c - C中的最大小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52002105/

相关文章:

c# - 如何使用 decimal.MaxValue 进行测试?

c# - 如何将多个变量的值添加到一个变量中? | C#

java - Java 中的四舍五入小数

c - 为什么要在 C 中的 main() 函数之前加上数据类型?

c - 浮点到字符串表示

python - 将十六进制转换为 float

c - 浮点异常C代码

c - 如何纵向遍历一个trie?

c fork pipe 和 read 函数从文件描述符中给出随机字节

C printf : variable string column width, 左对齐