是否可以仅使用整数运算来打印浮点数?
Is it possible to print a float using integer arithmetic only?
我目前正在阅读有关浮点数的内容,并且偶然发现了以下练习:
Print a float in decimal format. The float is assumed to be IEEE 754 single.
All the decimal digits must be printed, including those obtained because of rounding errors. For example, when the user inputs 0.1, the corresponding float is shown as 0.1000000015, and so on.
是否可以不使用浮点运算以十进制格式打印浮点数?我知道最简单的方法是将浮点数重复乘以 10,将其截断并取整数部分中最低有效的小数位。但是这样做需要浮点乘法和截断。
编辑:我的主要问题是关于打印小数部分。
这就是我要实现的。
第 0 步。设置:
result = 0
addend = 5
第1步,在其二进制表示中找到浮点数小数部分的开头(在此处手动计算时会进行反归一化)。
第二步,标记小数部分的开头后,从左到右一位一位地读。计算:
if (bit_read = 1)
result = result * 10 + addend
addend = addend * 5
重复步骤 2,直到小数部分结束。
第 3 步。将 result
打印为整数。
这样的算法是否适用于所有范围的法线和非正规线?
如果您可以访问浮点数的二进制表示(在您的 "agnostic language" 中),您可以将每个位一位一位地读取到一个字符串中 - 然后仅使用整数解析该字符串(将其打印为浮动)。
所以在上述情况下答案是:是
更新 (问题编辑后)
可能是 THIS 浮点表示的描述及其解析对您的情况很有用。
我目前正在阅读有关浮点数的内容,并且偶然发现了以下练习:
Print a float in decimal format. The float is assumed to be IEEE 754 single. All the decimal digits must be printed, including those obtained because of rounding errors. For example, when the user inputs 0.1, the corresponding float is shown as 0.1000000015, and so on.
是否可以不使用浮点运算以十进制格式打印浮点数?我知道最简单的方法是将浮点数重复乘以 10,将其截断并取整数部分中最低有效的小数位。但是这样做需要浮点乘法和截断。
编辑:我的主要问题是关于打印小数部分。 这就是我要实现的。
第 0 步。设置:
result = 0
addend = 5
第1步,在其二进制表示中找到浮点数小数部分的开头(在此处手动计算时会进行反归一化)。
第二步,标记小数部分的开头后,从左到右一位一位地读。计算:
if (bit_read = 1)
result = result * 10 + addend
addend = addend * 5
重复步骤 2,直到小数部分结束。
第 3 步。将 result
打印为整数。
这样的算法是否适用于所有范围的法线和非正规线?
如果您可以访问浮点数的二进制表示(在您的 "agnostic language" 中),您可以将每个位一位一位地读取到一个字符串中 - 然后仅使用整数解析该字符串(将其打印为浮动)。
所以在上述情况下答案是:是
更新 (问题编辑后)
可能是 THIS 浮点表示的描述及其解析对您的情况很有用。