当前位置: 首页 > 知识库问答 >
问题:

如何获取浮点数的符号、尾数和指数

沈旻
2023-03-14

我有一个程序,它运行在两个处理器上,其中一个不支持浮点运算。所以,我需要在处理器中使用定点执行浮点计算。为此,我将使用浮点仿真库。

我需要首先在支持浮点的处理器上提取浮点数的符号、尾数和指数。所以,我的问题是如何得到单精度浮点数的符号、尾数和指数。

按照此图的格式,

void getSME( int& s, int& m, int& e, float number )
{
    unsigned int* ptr = (unsigned int*)&number;

    s = *ptr >> 31;
    e = *ptr & 0x7f800000;
    e >>= 23;
    m = *ptr & 0x007fffff;
}

共有3个答案

萧霍英
2023-03-14

找出直接支持浮点数的CPU上使用的浮点数的格式,并将其分解为这些部分。最常见的格式是IEEE-754。

或者,您可以使用一些特殊函数来获得这些部件(double-frexp(double-value,int*exp) 和<代码>双ldexp(双x,int-exp) ),如此答案所示。

另一种选择是将%aprintf()一起使用。

赫连瑾瑜
2023-03-14

我的建议是坚持规则0,如果这足够的话,不要重做标准库已经做过的事情。看看math. h(标准C中的cma)和函数frexp、frexpf、frexpl,它们在其意义和指数部分打破了浮点值(双精度、浮点或长双精度)。要从意义中提取符号,您可以使用signbit,也可以在math. h/cma中使用,或者复制符号(仅限C11)。一些不同语义学的替代方案是modf和ilogb/calbn,可在C11中使用;http://en.cppreference.com/w/cpp/numeric/math/logb比较它们,但我在留档中没有找到所有这些函数在 /-inf和NaN中的表现。最后,如果您真的想使用位掩码(例如,您迫切需要知道确切的位,并且您的程序可能具有不同表示形式的不同NaN,并且您不信任上述函数),至少通过使用Float. h中的宏使所有内容独立于平台/cft。

蒋向笛
2023-03-14

我认为最好是用工会来做演员,这更清楚。

#include <stdio.h>

typedef union {
  float f;
  struct {
    unsigned int mantisa : 23;
    unsigned int exponent : 8;
    unsigned int sign : 1;
  } parts;
} float_cast;

int main(void) {
  float_cast d1 = { .f = 0.15625 };
  printf("sign = %x\n", d1.parts.sign);
  printf("exponent = %x\n", d1.parts.exponent);
  printf("mantisa = %x\n", d1.parts.mantisa);
}

示例基于http://en.wikipedia.org/wiki/Single_precision

 类似资料:
  • 我试图得到浮点数的尾数(只是为了学习),但它没有按预期工作。 比如说5.3的尾数是53,对吗?我尝试了以下代码: 它打印了2726298。它不应该去掉指数位并留下53吗?我尝试了很多事情,但总是这样。我做错了什么?

  • 我有一个函数,它将被传递一个空指针。此指针可以是int、char或float。我知道通过关联值将传递给我的数据类型。例如,下面是我的函数的外观: 如果传递给我的void指针最初是一个char类型,我将它转换回char类型,有没有办法确定与该指针关联的字节数?例如,如果我的函数按如下方式调用: 我将void指针转换回char指针 有没有什么方法可以计算出使用了多少字节?我可能需要搜索空字符并计算它与

  • 我有像0.152545这样的浮点值,我只想要0.1f。< br >这怎么可能..< br >通过使用String,我获得了字符串值。下面的代码显示了结果。 这给了我字符串值,如0.1f,但我只想要浮点值,如0.1f。

  • 我的java程序中有一些浮点变量: 在我的计算中,浮点变量小数点后的位数会增加或减少,以保持精度。例如,在一些计算系统之后。出来println(var1);可打印: 或 或 我想将这些值四舍五入到小数点后的3位,并删除后续的小数位数,以便对float进行四舍五入,如下所示: 据我所知,数字格式和字符串。format()以格式化字符串的形式返回输出。如何将输出作为四舍五入浮点,以便在计算中进一步使用

  • 问题内容: 我从属性文件中获取了int,float,boolean和string。一切都已加载到属性中。目前,我正在解析值,因为我知道特定键的期望值。 设置这些常量值的更好方法是什么,如果我不知道什么可能是键的原始值数据类型。 属性文件。messassge.properties Constant.java 问题答案: 如果您拥有一类配置值(例如您的类),并且想要从配置(属性)文件中加载所有值,则可

  • 问题内容: 如何在Python中转换类似float的字符串? 问题答案: 只需删除带有: