This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28377S:浮点数据加法运算输出被截断

Guru**** 2460650 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/684365/tms320f28377s-float-data-add-operation-output-is-truncated

器件型号:TMS320F28377S

我使用 TMS320F28379DEVM 执行以下测试

定义全局变量

浮点 B = 524288.0;

浮点 C = 0.02;

然后按照 while infinite loop 中的以下语句执行,但发现 B 始终为524288.0

 b = B+C;

 

我怀疑这应该是由舍入模式引起的、请帮助解释这一点、并建议您避免数据被截断

非预期输出。

谢谢。

 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    不是、它不是舍入、它是浮点数学的标准限制。 由于单精度浮点的尾数为24位宽、因此您可以添加小至2^24倍的内容。 2^24..2^25较小的加法是边缘的、舍入可能有助于也可能不会帮助对总和进行更改、小于/2^25的所有项的行为都将为0.0。 根据应用要求、您应该切换到双精度、整数或 Q 整数分数。

    此致、
    Edward
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    了解更大的1/2^25数据可以对 ADD 操作生效,但0.02大于1/2^25,这是如何发生的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的意思是、与较大的加数相比、增加2^24倍是微不足道的。 在您的案例中是这样的
    524288/2^24 = 0.03125
    这种相对较小的加法可能会也可能不会导致较大加法与总和之间的变化、这取决于舍入。 在 FP 机器上、舍入为最接近的偶数
    524288 + 0.03125= 524288
    524288 + 0.0312500037252903 = 524288.0625
    524288.0625 + 0.0312500037252903 = 524288.125
    。 但无论如何、根据经验、您应该期望将相对非常小的浮点值添加到相对大得多的浮点值中、您可能会完全失去较小的附加值。 对于浮点,“截断”裕度为~1/2^ 24,对于双精度,裕度为~1/2^53。

    此致、
    Edward

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    明白、非常感谢。