c++ - IEEE 浮点和内存中的快速浮点表示

标签 c++ c floating-point ieee-754 blackfin

Analog Devices 的 BFF-533 处理器不提供 native 浮点支持,但提供浮点仿真。

使用 IDE VisualDSP++,用户可以在高性能浮点和严格的 IEEE 合规性之间进行选择。

据我了解,the difference between these two 会导致内存中浮点值的不同表示,因此我做了以下测试:

union TestType
{
    float hello;
    char test[4];   
};

TestType tt;
tt.hello = 0.00123456789;

我使用这两个选项编译并运行它,期望在测试数组中看到不同的值,但每次运行都得到相同的值:

enter image description here

有人可以解释一下为什么我在两次运行中都看到了 IEEE 表示吗?

最佳答案

您引用的文档讨论了用户定义的 fastfloat16 类型。您在此处使用 native float 类型。我不认为它们是等效的,无论 VisualDSP 设置如何。

“严格的 IEEE 合规性”通常被解释为“即使是边缘情况也能正确处理”。 IEE754 的边缘情况包括非正规数、除以零、无穷大、非数字等。例如,在 IEEE754 NaN != NaN 中。这意味着您无法进行快速 32 位比较。另一个例子是 IEEE754 要求基本数学运算精确到最后一位。使用 IEEE754 float 布局可以显着提高速度,但不能使用 IEEE754 数学。

关于c++ - IEEE 浮点和内存中的快速浮点表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45586128/

相关文章:

c++ - C++ 程序中的文字 "or"?

floating-point - 浮点不准确示例

c - 将 double 转换为 float 时会发生什么?

c++ - g++ 在 freebsd 上包含路径

C++/RSA转换 key

c++ - clang-format 重写 WebKit 风格的多行注释

c - 使用 gdb 调试 C 代码

c++ - Visual Studio 上的 AWS C++ SDK 链接器错误

c++ - 使用 select() 时无法捕获 SIGINT 信号

c++ - ceil 函数在 C++ 中如何工作?