我需要编写添加两个数字的函数,但我们有一个不支持变量类型浮点数的处理器!!
因此,为了表示分数,使用长整数表示实际用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;
。 。 。
谢谢:)
答案 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