【问题标题】:IEEE floating point and fast floating point representation in memory内存中的 IEEE 浮点和快速浮点表示
【发布时间】:2017-08-09 17:57:36
【问题描述】:

ADI 公司的 BFF-533 处理器不提供原生浮点支持,但提供浮点仿真。

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

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

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

TestType tt;
tt.hello = 0.00123456789;

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

有人能解释一下为什么我在两次运行中看到的似乎都是 IEEE 表示吗?

【问题讨论】:

  • 差异可能不在于内存表示,而在于如何处理值? IE。更多的是速度优化配置而不是内存内容配置?
  • 如果将100 添加到tt.hello 会怎样?严格的 IEE-754 32bit 结果应该给你100.0012359619140625
  • ISTM 认为@Yunnosch 是对的。表示没有什么不同,但我猜处理(模拟)数学的算法是不同的。可能,一种更准确且 100% 符合 IEEE 标准,另一种更快,但会走弯路,因此比 IEEE 一致性要求的准确度略低。
  • 感谢您的意见。你可能是对的!
  • @YSC 我认为 IEEE-754 可以准确地表示 100?在这里试试:h-schmidt.net/FloatConverter/IEEE754.html

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 2017-04-08
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多