添加两个没有float变量的数字

时间:2017-01-15 12:59:17

标签: floating-point precision long-integer floating-accuracy

我需要编写添加两个数字的函数,但我们有一个不支持变量类型浮点数的处理器!!

因此,为了表示分数,使用长整数表示实际用4B-32bit表示。

我们将长位定义如下:

MSB标记为S -signed。

标记为E的8位 - 指数。

其余23位标记为M -mantissa。

以下公式表示长的分数:

(E ^ 2)的(M)(S ^ -1)。

我需要编写函数:

unsigned long add(unsigned long float1,unsigned long float2)

接收两个长值(实际上是分数),添加它们并长时间返回答案。

我试图做这样的事情但是我被卡住了。

unsigned long add(unsigned long float1,unsigned long float2){

    char E1=float1>>23, E2=float2>>23, E3;

。 。 。

谢谢:)

1 个答案:

答案 0 :(得分:0)

要解释sui's answer,这里有一些伪代码。

while exponent(f1) > exponent(f2):
    increment exponent(f2)
    shiftleft mantissa(f2)

while exponent(f2) > exponent(f1):
    increment exponent(f1)
    shiftleft mantissa(f1)

add mantissa(f1) to mantissa(f2)
adjust exponent
calculate sign