首页 > 解决方案 > 是否可以仅使用整数算术打印浮点数?

问题描述

我目前正在阅读有关浮点数的内容,并且偶然发现了以下练习:

以十进制格式打印浮点数。浮点数假定为 IEEE 754 single。必须打印所有十进制数字,包括由于舍入错误而获得的数字。例如,当用户输入 0.1 时,对应的浮点数显示为 0.1000000015,以此类推。

是否可以不使用浮点运算以十进制格式打印浮点数?我知道最简单的方法是将浮点数重复乘以 10,将其截断并在整数部分取最低有效十进制数字。但这样做需要浮点乘法和截断。

编辑:我的主要问题是关于打印小数部分。这就是我想要实现的。

步骤 0. 设置:

result = 0
addend = 5

步骤 1. 在其二进制表示中找到浮点数小数部分的开头(此处的反规范化将在手动计算中完成)。

Step 2. 标记小数部分的开头后,从左到右逐位读取。计算:

if (bit_read = 1)
    result = result * 10 + addend
addend = addend * 5

重复步骤 2,直到小数部分结束。

步骤 3. 打印result为整数。

这样的算法能否在所有法线和非规范范围内正常工作?

标签: floating-pointlanguage-agnostic

解决方案


如果您可以访问浮点数的二进制表示(在您的“不可知语言”中),您可以将每个位逐位读取到字符串 - 然后仅使用整数解析该字符串(将其打印为浮点数)。

所以在上述情况下,答案是:是的

更新 (问题编辑后)

可能是浮点表示的THIS描述及其解析对您的情况很有用。


推荐阅读