是否可以仅使用整数运算打印浮点数?

时间:2018-05-03 07:59:08

标签: floating-point language-agnostic

我正在阅读浮点数,我偶然发现了以下练习:

  

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

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

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

步骤0.设置:

result = 0
addend = 5

步骤1.以二进制表示法定位浮点的小数部分的开头(反规格化将在此处手动计算)。

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

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

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

步骤3.将result打印为整数。

这样的算法能否正常处理所有法线和非正规范围?

1 个答案:

答案 0 :(得分:0)

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

因此,在上述情况下,答案是:

更新 (问题编辑后)

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