IEEE 浮点和内存中的快速浮点表示
IEEE floating point and fast floating point representation in memory
Analog Devices 的 BFF-533 处理器不提供本机浮点支持,但提供浮点仿真。
使用 IDE VisualDSP++,允许用户 select 在高性能浮点和严格的 IEEE 合规性之间。
据我了解,the difference between these two 导致内存中浮点值的不同表示,因此我进行了以下测试:
union TestType
{
float hello;
char test[4];
};
TestType tt;
tt.hello = 0.00123456789;
我编译并 运行 这两个选项,期望在测试数组中看到不同的值,但我每个都得到相同的值 运行:
有人可以解释为什么我在两个 运行 中看到的似乎是 IEEE 表示吗?
您引用的文档讨论了用户定义的 fastfloat16
类型。您在此处使用本机 float
类型。无论 VisualDSP 设置如何,我都不认为它们是等效的。
"Strict IEEE compliance" 通常被解释为 "even the edge cases are handled correctly"。 IEE754 的边缘情况是非正规数、被零除、无穷大、非数字等。一个例子,在 IEEE754 NaN != NaN
中。这意味着您不能进行快速的 32 位比较。另一个例子是 IEEE754 要求基本数学运算精确到最后一位。使用 IEEE754 浮点布局可以实现显着的加速,但不是 IEEE754 数学。
Analog Devices 的 BFF-533 处理器不提供本机浮点支持,但提供浮点仿真。
使用 IDE VisualDSP++,允许用户 select 在高性能浮点和严格的 IEEE 合规性之间。
据我了解,the difference between these two 导致内存中浮点值的不同表示,因此我进行了以下测试:
union TestType
{
float hello;
char test[4];
};
TestType tt;
tt.hello = 0.00123456789;
我编译并 运行 这两个选项,期望在测试数组中看到不同的值,但我每个都得到相同的值 运行:
有人可以解释为什么我在两个 运行 中看到的似乎是 IEEE 表示吗?
您引用的文档讨论了用户定义的 fastfloat16
类型。您在此处使用本机 float
类型。无论 VisualDSP 设置如何,我都不认为它们是等效的。
"Strict IEEE compliance" 通常被解释为 "even the edge cases are handled correctly"。 IEE754 的边缘情况是非正规数、被零除、无穷大、非数字等。一个例子,在 IEEE754 NaN != NaN
中。这意味着您不能进行快速的 32 位比较。另一个例子是 IEEE754 要求基本数学运算精确到最后一位。使用 IEEE754 浮点布局可以实现显着的加速,但不是 IEEE754 数学。