【问题标题】:Getting the exponent of a floating number in C在C中获取浮点数的指数
【发布时间】:2014-03-03 23:32:53
【问题描述】:

所以我试图返回 f 的指数值。如果 x 是无穷大或 NaN,我需要返回 Tmax。 f 将被解释为单精度浮点值的位级表示,是的,我的意思是传入一个无符号变量。我知道我需要删除适当的偏差值。我只是想不通怎么做。我可以使用任何我想要的操作,但只有 8 个(= 不计算在内)。

int float_exp(unsigned uf) {
    int mask = 2139095040;
    int hold;
    hold = uf & mask;
    if(mask == hold){
            return Tmax;
    } else {
        return ;// something here???
    }

}

我不知道如何获得指数。任何帮助将不胜感激!

【问题讨论】:

  • 如果不是为了作业,你会在手册中查找frexp()。
  • 另见Dividing floating point numbers by half in binary。不是直接重复,而是密切相关。
  • @JonathanLeffler 你的 cmets 没有帮助。
  • 为什么用十进制表示掩码? Hex 会让你的工作对你的读者和你自己更清楚。
  • 按位运算应使用十六进制掩码,因为它与二进制编码直接相关

标签: c floating-point puzzle exponent


【解决方案1】:

检查浮点格式http://en.wikipedia.org/wiki/IEEE_754-1985

二进制指数位于第 23 位到第 30 位。因此,在屏蔽 0x7F800000 之后,就像您所做的那样,您只需将左边的内容向右移动 23 位,您就有了二进制指数。

然后通过减去它来调整偏差。

【讨论】:

    【解决方案2】:

    如果数字是非规格化的,则从指数中减去 127。如果不是,则减去 126。

    【讨论】:

    • 谢谢。我想我现在明白了。
    • @Cole 是不是反过来,如果数字反规范化,减去126。
    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多