在使用printf格式化浮点数时,似乎每个人都使用6个字符的默认精度。
为什么6?
在32位浮标被广泛使用之前是否出现过这种情况?
答案 0 :(得分:6)
根据Wikipedia,具有32位的浮点的通用IEEE 754表示具有大约7个十进制数字的精度。所以6看起来是合理的价值。
您需要双精度(64位)才能获得大约16位十进制数字。
答案 1 :(得分:3)
嗯,不,这在32位浮点数被广泛使用之前没有出现。第一个浮点表示 - 在IEEE规范存在之前就已经存在 - 是32位(或左右),因此没有"默认精度"用于在此之前输出浮点值。
无论如何,对于32位浮点类型,有效数或尾数的典型大小为20到25位(IEEE 32位浮点数的有效位数为24位),表示四到七位有效十进制数字表示最高精度。 (24*log(2)
大致等于7.2
)。
典型的64位浮点表示具有介于50和55位之间的有效位(64位IEEE表示具有53位有效位数),其表示最大精度的大约十五个小数位。
这意味着程序员经常默认在5到6位小数之间输出浮点值。较低的精度会截断值(增加打印值并再次读取时产生的误差),更高的精度会导致输出"噪声" (小数点后面的杂散数字,影响了人类的可读性,并没有帮助写/读往返)。
所有这些都早于C - 实际上它早于Algol(早期编程语言之一,其设计影响的语言是C的祖先)。
答案 2 :(得分:2)