如何设计一种算法,将两个浮点数相乘而不带"*"?

How to design an algorithm that multiplies two floats without '*'?

本文关键字:两个 浮点数 一种 算法      更新时间:2023-10-16

如何设计一种算法,只使用加法、移位和逐位运算来获取两个浮点并将其相乘?

我已经为整数找到了一个这样的函数,但它不适用于浮点运算。我还发现了另一个很像我需要的东西,但在我的情况下,日志也是被禁止的。

浮点数是根据IEEE754标准存储的。我也试着保留它们的指数部分,并逐位乘以它们的分数部分,但运气不佳。

根据http://en.wikipedia.org/wiki/IEEE_floating_point,一个IEEE754数字x = (-1)^s * c * b^qs,c,b,q表示,全部为整数。对于具有相同基数的两个浮点数CCD_ 3是相同的。

所以两个浮点数xy的乘积是:

(-1)^(s1+s2)*c1*c2*b^(q1+q2),所以新的浮点表示为:s1+s2, c1*c2, b q1+q2,所以你只需要处理c1c2的乘积,两者都是整数,所以你就完成了。