我想知道浮点数总和是如何工作的。 如何使用按位运算对两个双(或浮点)数进行求和?
答案 0 :(得分:8)
简短回答:如果你需要问,你不会从按位运算符实现浮点加法。这是完全可能的,但您需要先了解一些细微的要点。您可以从实现double→float转换函数开始,它更简单但会向您介绍许多概念。您也可以将{→3>}作为双倍→最接近的整数。
然而,这是添加的天真版本:
为两个操作数中的每一个使用大的位数组(float
为254 + 23,double
为2046 + 52)。根据指数将有效数字放在数组中的正确位置。假设参数都是规范化的,不要忘记放置隐式前导1.使用通常的exercise规则添加两个位数组。然后将结果数组转换为浮点格式:首先查找最左边的1;最左边1的位置决定了指数。结果的有效位数在该前导1之后立即开始,并且分别为23或52位宽。之后的位确定该值是应该向上舍入还是向下舍入。
虽然这是天真的版本,但它已经非常复杂了。
非天真版本不使用2100位宽阵列,而是利用一些“保护位”(参见binary addition中的“关于舍入”一节)。
其他细微之处包括: