【问题标题】:Adding two numbers without float variable添加两个没有浮点变量的数字
【发布时间】:2017-05-30 09:41:28
【问题描述】:

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

所以要表示分数,就是用长整数表示,实际用4B-32bit表示。

我们定义长比特如下:

标记为 S -signed 的 MSB。

标记为 E 之后的 8 位 - 指数。

剩余的 23 位标记为 M 尾数。

以下公式表示long中的分数:

(E^2)(M)(S^-1).

我需要编写函数:

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

接收两个 long 值(实际上是分数),将它们相加并以 long 形式返回答案。

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

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

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

。 . . .

谢谢:)

【问题讨论】:

  • 什么语言/环境?

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


【解决方案1】:

套用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

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    相关资源
    最近更新 更多