使用整数运算的浮点加法

Posted

技术标签:

【中文标题】使用整数运算的浮点加法【英文标题】:Floating Point addition using integer operations 【发布时间】:2013-05-09 13:42:30 【问题描述】:

我正在编写代码,用于在 C++ 中使用整数加法和移位来枚举浮点加法以完成一些作业。我已经用谷歌搜索了这个主题,我可以通过调整指数然后添加来添加浮点数。问题是我找不到合适的算法来四舍五入结果。现在我正在使用截断。它显示了大约 0.000 倍量级的误差。但是当我尝试将这个加法器用于 fft 等复杂计算时,它会显示出巨大的错误。 所以我现在正在寻找的是我的机器用来四舍五入浮点结果的确切算法。如果有人可以为此目的发布一些链接,那就太好了。

提前致谢。

【问题讨论】:

【参考方案1】:

最常见的是,如果要舍入的位表示的值小于要保留的最小位的一半,则向下舍入,与截断相同。如果它们代表超过一半,则向上四舍五入,从而在最小保留位的位置加一。如果它们恰好是一半,则如果最小保留位为零,则向下舍入,如果该位为 1,则向上舍入。这被称为“四舍五入到最接近,关系到偶数”。

这假设你已经得到了你正在四舍五入的所有位,并且在做算术的过程中还没有丢失任何位。如果您无法保留所有位,则有一些技术可以跟踪有关它们的足够信息以进行正确的舍入,例如维护称为保护位、舍入位和粘性位的三个位。

【讨论】:

以上是关于使用整数运算的浮点加法的主要内容,如果未能解决你的问题,请参考以下文章

JS 乘法运算出现了浮点,该怎么解决

数据的表示和运算-第一节3:无符号数的表示和运算

shell 算术运算符

使用浮点运算对整数数据进行右移运算?

00007_运算符

用c语言实现超长整数的加法运算