【发布时间】:2017-05-07 08:48:21
【问题描述】:
(上下文:我正在为嵌入式应用程序编写一个轻量级的 printf(),并且我希望它在实用时表现得像真正的 printf()。)
我了解 gcc 和其他行为良好的库在以下情况下使用“四舍五入”(又名“银行家四舍五入”)来防止统计偏差:
printf("%0.0f %0.0f %0.0f %0.0f\n", 0.5, 1.5, 2.5, 3.5);
=> 0 2 2 4
令我惊讶的是,相同的舍入规则不适用于其他精度:
printf("%0.1f %0.1f %0.1f %0.1f\n", 0.05, 0.15, 0.25, 0.35);
=> 0.1 0.1 0.2 0.3
这是预期的行为吗?我本来期望的:
=> 0.0 0.2 0.2 0.4
精通数值计算的人能否解释一下所需的行为,以及为什么?
(注意:请参阅http://rextester.com/IUXDW9788 以获取实时示例。)
【问题讨论】:
标签: c floating-point printf rounding