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.

[参考译文] CCS/TMS320F280049:TMS320F280049:计算精度问题

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/766678/ccs-tms320f280049-tms320f280049-problems-with-accuracy-of-calculations

器件型号:TMS320F280049

工具/软件:Code Composer Studio

您好!
我在这个项目中遇到了以下问题、几天前我注意到了这些问题、但现在它开始给我带来了真正的问题。 这是一个计算问题。 当我为浮点变量分配一些数字时、控制器会对其进行误解。 这些。:
浮点 x1 = 5.3f;
float x2 = 5.3f;
浮点 x3 = 0.0f;

在"Expressions"选项卡中、这些变量被写入5、30000019、然后使用这些值进行计算。 对我来说,当我开始计算一组正弦值时,这就产生了一个真正的问题,考虑到500次迭代,误差变得非常大,最后一个正弦值为0.006…… 为0.17。
请告诉我、问题可能出在哪里?

我还将存档与我的项目附加在一起。

e2e.ti.com/.../Project_5F00_5.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这意味着5.3在二进制中不能完全表达、很像1/3在基10中不能表达。

    最好的办法是按照1978年"编程风格元素"中的 Kernigham 和 Pl搅 龙的建议进行操作。

    "10.0乘以0.1几乎永远不会达到0.1"

    "使用浮点操作就像移动沙堆、每次移动时、都会失去一点沙子、并拾起一点灰尘"

    因此、最好使用整数并缩放浮点数、而不是重复求和浮点数。

    而不是:
    float_num = 0;
    对于(int i=0;i<10;i++)

    float_num += 0.1


    尝试如下操作:

    对于(int i = 0;i<10;i++)

    float_num = i*0.1;


    虽然任何特定的数字都可能有点偏离、但误差不会累积。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这些变量...

    [引用用户="Andrey Chernyshev"]float x1 = 5.3f;
    float x2 = 5.3f;
    float x3 = 0.0f;[/报价]

    使用 IEEE 32位单精度格式。  如果您需要更高的精度、请考虑改用 long double 类型。  采用 IEEE 64位双精度格式。  如果进行了该更改、则常量也需要采用长双精度格式。  使用后缀 L 代替 f。 有关更多详细信息、请在 C28x 编译器手册中搜索 标题 为 C28x double 和 long double 浮点类型的子章节。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的澄清、这对我大有帮助!