我有一个程序,它运行在两个处理器上,其中一个没有浮点支持.所以,我需要在该处理器中使用固定点执行浮点计算.为此,我将使用浮点仿真库.
我需要首先在处理器上提取浮点数的符号,尾数和指数,它们支持浮点数.所以,我的问题是如何获得单个精度浮点数的符号,尾数和指数.
按照这个图的格式,
这就是我到目前为止所做的,但除了符号,尾数和指数都不正确.我想,我错过了一些东西.
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) 科学记数法是表达具有明确数量级的数字的常用方法.首先是非零数字,然后是小数点,然后是小数部分和指数.在二进制中,只有一个可能的非零数字.
浮点数学涉及隐含的第一个数字等于1,然后尾数位"跟随小数点".
那么为什么frexp()将小数点放在隐含位的左边,并返回[0.5,1]中的数字而不是像科学符号那样的[1,2]?是否有一些溢出要小心?
实际上,它比IEEE 754/ISO 60559规定的偏差值减去一个以上.在硬件中,这可能会增加XOR的附加值.考虑到在许多情况下恢复正常将需要另一个浮点运算,这似乎是一个相当弱的论点.