相关疑难解决方法(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万
查看次数

从float C++中提取数字

给定double x,并假设它在于[0,1].假设例如x = 0.3 In binary,(保持小数点后10位),它表示为

x=0.0100110011...
Run Code Online (Sandbox Code Playgroud)

我想写一些C++代码,它将提取小数点后面显示的10位数字.换句话说,我想提取整数(0100110011)_2.

现在我对比特转换很新,我对这个问题的解决方案如下

int temp= (int) (x*(1<<10))
Run Code Online (Sandbox Code Playgroud)

然后temp在二进制中将有必要的10位数.

这是执行上述过程的安全方法吗?或者有更安全/更正确的方法吗?

注意:我不希望以字符数组的形式提取数字.我特别想要一个整数(或无符号整数).这样做的原因是,在生成八叉树时,空间中的点根据其名为Morton Keys的位置给出散列键.这些键通常存储为整数.在获得所有点的积分键之后,它们将被分类.从理论上讲,这些密钥可以通过将坐标缩放到[0,1],提取比特并交织它们来获得.

c++ floating-point binary bit-manipulation

5
推荐指数
1
解决办法
776
查看次数

打印浮点数,使指数标记为"*10 ^"而不是"e"

我正在寻找一种在C/C++中打印浮点(或双倍)f的可能性f = 1.234e-15,比如打印为

  • f = 1.234*10^-15,或者,甚至更好,作为
  • f = 1.234*10^{-15}

谁能帮我?也许有一种方法可以在基数10中获得指数"-15"和尾数"1.234".我发现了一个问题,我如何提取双尾数的尾数,但不幸的是,这并没有真正帮助,因为它只得到尾数在基地2.

c c++ floating-point representation

4
推荐指数
1
解决办法
1270
查看次数

浮点数的二进制表示

为什么这两个调用二元函数计算相同的输出(至少在VS2010下)?

#include <iostream>
#include <bitset>
#include <limits>
using namespace std;

template<class T> bitset<sizeof(T)*CHAR_BIT> toBinary(const T num) 
{
    bitset<sizeof(T)*CHAR_BIT> mybits;
    const char * const p = reinterpret_cast<const char*>(&num);
    for (int i = sizeof(T)*CHAR_BIT-1 ; i >= 0 ; --i)
        mybits.set(i, (*(p)&(1<<i) ));
    return mybits;
}

int main() 
{
    cout << toBinary(8.9).to_string() << "\n"; 
    cout << toBinary( 8.9 + std::numeric_limits<double>::epsilon() ).to_string()  << "\n"; 
    cin.get();
}
Run Code Online (Sandbox Code Playgroud)

c++ double

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