似乎每个人在使用printf格式化浮点数时都使用默认的6个字符精度。
为什么是6?
这是在32位浮点数广泛使用之前出现的吗?
似乎每个人在使用printf格式化浮点数时都使用默认的6个字符精度。
为什么是6?
这是在32位浮点数广泛使用之前出现的吗?
根据维基百科的介绍,使用32位的IEEE 754浮点表示法,精确度约为7个十进制数字。因此,6看起来是一个合理的值。
如果需要获得大约16个十进制数位,则需要使用双精度(64位)。
这并不是在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的祖先语言)。