发布
社区首页 >问答首页 >printf浮点数默认精度的历史记录是什么?

printf浮点数默认精度的历史记录是什么?
EN

Stack Overflow用户
提问于 2015-08-20 19:39:22
回答 3查看 447关注 0票数 3

似乎每个人在使用printf格式化浮点数时都使用6个字符的默认精度。

为什么是6?

这是在32位浮点数被广泛使用之前出现的吗?

EN

回答 3

Stack Overflow用户

发布于 2015-08-20 20:24:54

根据Wikipedia的说法,32位浮点数的常见IEEE754表示法的精度约为7位十进制数字。因此,6看起来是一个合理的值。

您需要双精度(64位)才能获得大约16位十进制数字。

票数 6
EN

Stack Overflow用户

发布于 2015-08-20 20:36:04

嗯,不,这并不是在32位浮点数被广泛使用之前。最早的浮点表示法--远在IEEE规范出现之前--是32位(或大约32位),因此在此之前没有输出浮点值的“默认精度”。

无论如何,对于32位浮点类型,有效数或尾数的典型大小是20到25位(IEEE 32位浮点数具有24位的有效数),其计算出表示最大精度的四到七个有效十进制数。(24*log(2)大致等于7.2)。

典型的64位浮点表示具有介于50和55位之间的有效数(64位IEEE表示具有53位有效数),其计算出表示最大精度的大约15个小数位。

这意味着程序员通常默认输出小数点后5到6位的浮点值。较低的精度将截断数值(增加打印输出并重新读入数值所产生的误差),而较高的精度将倾向于输出“噪声”(小数点后更远的散乱数字,这会影响人类的可读性,并且对写入/读取往返没有太大帮助)。

票数 3
EN

Stack Overflow用户

发布于 2015-08-20 21:09:59

printf的历史上,6位数的默认值至少可以追溯到5unix版本。请参阅古老的源代码:

  • fltpr.s实现%fpfloat函数和实现%epscien函数都在指令mov $6,_ndigit
  • printf.s中包含魔术数字6,该指令在找到%f%e转换时调用pfloatpscien
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32117254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档