c编程语言中浮点值的大小范围?

c编程语言中浮点值的大小范围?,c,floating-point,C,Floating Point,丹尼斯·里奇(Dennis Ritchie)的C编程语言书中提到,“浮点数通常是一个32位的量,至少有六个有效数字,其大小通常在10^-38和10^+38之间。” 既然我们只有32位,那怎么可能呢?上限不应该是2^32吗?我试着打印出一个浮点数,循环并将浮点数乘以10,38倍,这就是输出10000006944061730000000000000000000000.000000。它还必须跟踪符号,那么它是如何将所有这些存储在32位中的呢?有关典型的C浮点的详细信息,请参阅 c编程语言中浮点值的大小

丹尼斯·里奇(Dennis Ritchie)的C编程语言书中提到,“浮点数通常是一个32位的量,至少有六个有效数字,其大小通常在10^-38和10^+38之间。”

既然我们只有32位,那怎么可能呢?上限不应该是2^32吗?我试着打印出一个浮点数,循环并将浮点数乘以10,38倍,这就是输出10000006944061730000000000000000000000.000000。它还必须跟踪符号,那么它是如何将所有这些存储在32位中的呢?

有关典型的C
浮点的详细信息,请参阅

c编程语言中浮点值的大小范围


打印
浮点
时,通常只有大约6位(
FLT\u DIG,FLT\u DECIMAL\u DIG
)的有效数字是重要的

printf("%.*e\n", FLT_DIG-1, FLT_TRUE_MIN);
printf("%.*e\n", FLT_DIG-1, FLT_MIN);
printf("%.*e\n", FLT_DIG-1, acos(-1));
printf("%.*e\n", FLT_DECIMAL_DIG - 1, nextafterf(FLT_MAX, 0.0));
printf("%.*e\n", FLT_DECIMAL_DIG - 1, FLT_MAX);
输出

1.40130e-45    // min sub-normal
1.17549e-38    // min normal
3.14159e+00    // pi
3.40282326e+38 // number before max
3.40282347e+38 // max
有关典型的C
浮点
的详细信息,请参阅

c编程语言中浮点值的大小范围


打印
浮点
时,通常只有大约6位(
FLT\u DIG,FLT\u DECIMAL\u DIG
)的有效数字是重要的

printf("%.*e\n", FLT_DIG-1, FLT_TRUE_MIN);
printf("%.*e\n", FLT_DIG-1, FLT_MIN);
printf("%.*e\n", FLT_DIG-1, acos(-1));
printf("%.*e\n", FLT_DECIMAL_DIG - 1, nextafterf(FLT_MAX, 0.0));
printf("%.*e\n", FLT_DECIMAL_DIG - 1, FLT_MAX);
输出

1.40130e-45    // min sub-normal
1.17549e-38    // min normal
3.14159e+00    // pi
3.40282326e+38 // number before max
3.40282347e+38 // max

你看过浮点变量是如何工作的吗?它不是一对一的位,而是一个值和指数?与以前相比,现在的浮动有多大?请解释一下常用的IEEE 754标准格式。虽然C标准中没有指定实际使用的格式。谢谢,这些信息和链接非常有用。在发布问题之前,我可能应该做更多的研究。谢谢。扩大的范围是对准确性的权衡。并非该范围内的无穷多个实值都可以表示。只有大约2**32个。这里还有一个有用的参考资料,你看过浮点变量是如何工作的吗?它不是一对一的位,而是一个值和指数?与以前相比,现在的浮动有多大?请解释一下常用的IEEE 754标准格式。虽然C标准中没有指定实际使用的格式。谢谢,这些信息和链接非常有用。在发布问题之前,我可能应该做更多的研究。谢谢。扩大的范围是对准确性的权衡。并非该范围内的无穷多个实值都可以表示。只有大约2**32个。这里的另一个有用的参考:这个解释非常有意义,特别是关于2^32值分布的部分。这个解释非常有意义,特别是关于2^32值分布的部分。