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

确保C++双精度数为64位

在我的C++程序中,我需要从外部字节序列中提取64位浮点数.有没有办法确保在编译时双打是64位?我应该使用其他类型来存储数据吗?

编辑:如果您正在阅读本文并实际寻找确保以IEEE 754格式存储的方法,请查看下面的Adam Rosenfield的答案.

c++ compiler-construction precision types ieee-754

19
推荐指数
6
解决办法
1万
查看次数

IEEE 754/iec 559

IEEE 754浮点格式是否跨平台定义良好?在位格式和字节顺序方面?

我愿意在我的代码中添加以下内容(初始版本):

static_assert(std::numeric_limits<float>::is_iec559, "Only support IEC 559 (IEEE 754) float");
static_assert(sizeof(float) * CHAR_BIT == 32, "Only support float => Single Precision IEC 559 (IEEE 754)");

static_assert(std::numeric_limits<double>::is_iec559, "Only support IEC 559 (IEEE 754) double");
static_assert(sizeof(float) * CHAR_BIT == 64, "Only support double => Double Precision IEC 559 (IEEE 754)");

static_assert(std::numeric_limits<long double>::is_iec559, "Only support IEC 559 (IEEE 754) long double");
static_assert(sizeof(float) * CHAR_BIT == 128, "Only support long double  => Exteneded Precision IEC 559 (IEEE 754)");
//  More asserts if required. …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point double ieee-754

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

从浮点数转换为自定义数字类型

我已经创建了自己的固定类型整数类型,并且该库适用于许多编译器和平台,唯一需要解决的问题是从内置浮点类型转换为我的类型.

该浮点类型可有小尾数但随着指数沿着它可能有很大的价值,如果我选择投float,double或者long doublelong longunsigned long long可能发生截断.

如果编译器使用IEEE-754规范,那么提取尾数和指数很容易,但如果编译器使用其他格式则会怎样.

所以,我的问题是:是否有任何通用算法允许我仅使用语言功能从浮点数中提取完整值?

谢谢

c++ floating-point type-conversion

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