相关疑难解决方法(0)

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

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

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

按照这个图的格式,

在此输入图像描述 这就是我到目前为止所做的,但除了符号,尾数和指数都不正确.我想,我错过了一些东西.

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;
}
Run Code Online (Sandbox Code Playgroud)

c floating-point emulation

41
推荐指数
5
解决办法
9万
查看次数

为什么frexp()不能产生科学记数法?

科学记数法是表达具有明确数量级的数字的常用方法.首先是非零数字,然后是小数点,然后是小数部分和指数.在二进制中,只有一个可能的非零数字.

浮点数学涉及隐含的第一个数字等于1,然后尾数位"跟随小数点".

那么为什么frexp()将小数点放在隐含位的左边,并返回[0.5,1]中的数字而不是像科学符号那样的[1,2]?是否有一些溢出要小心?

实际上,它比IEEE 754/ISO 60559规定的偏差值减去一个以上.在硬件中,这可能会增加XOR的附加值.考虑到在许多情况下恢复正常将需要另一个浮点运算,这似乎是一个相当弱的论点.

c floating-point posix ieee-754

9
推荐指数
1
解决办法
371
查看次数

标签 统计

c ×2

floating-point ×2

emulation ×1

ieee-754 ×1

posix ×1