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/LAUNCXL-F2.8069万M:数学运算结果错误。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/583949/ccs-launchxl-f28069m-wrong-results-of-math-operations

部件号:LAUNCHTXL-F2.8069万M
主题中讨论的其他部件:controlSUITEMOTORWARE

工具/软件:Code Composer Studio

大家好,

有人知道为什么数学运算结果错误吗?我正在实施一种可生成两个角度的算法,此算法使用一组我赋予它的值来执行数学运算,此算法已在PC上编译和测试,结果很好。 但是当我在lauchxl-SUITE上运行时2.8069万 m ,我得到了其他角度是错误的,另一件有趣的事情是,当我在汽车器件中实施它时,我在一个简单的项目中运行它时得到了不同的结果(基于controlSUITE示例),但两者都是错误的。

这些是 汽车器具项目的结果

 这些是一个简单项目的结果

任何想法都很有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请您在此处发布数学代码吗? 我需要查看所有变量的完整计算和声明的数据类型。 我的第一个想法是,数据类型不是您可能认为的大小,我们可以尝试从这里开始进行调试

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

    我认为和你一样,我使用的是NREL算法的代码,你可以从 http://midcdmz.nrel.gov/spa/下载 ,我做了一些测试,我发现变量的大小比双精度的大, 然后我尝试将所有变量更改为long double,但在.econst部分中出现错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请查看本文档第103页并确认您是否声明的数据类型与您期望的大小相同: www.ti.com/.../spru514 m .pdf

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

    我的大多数变量都是double,并且超过了double的大小,我会将它们更改为long double,如何指定在末尾没有"l"的显式long double,例如:

    long double thire_order_polynomial (long double a,long double b,long double c,long double d,long double x)

      返回((A*x + b)*x + c)*x + d;

    }

    如果我没有将"l"添加到传递给函数的每个值中,则返回值错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    可以考虑使用typedef来减少为每个输入参数显式声明长双精度的需要,例如:

    typedef long double float64;

    这是我们controlSUITE库中的常见做法

    Sean
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我理解这一点,但如果我声明一个恒定的3D阵列,例如:
    const double B_Term[B_COUNT][B_MAX_SUBCOUNT][TERM_COUNT]=


    {280.0 ,3.199 ,8.4334万.662 },
    {102.0 ,5.422 ,5507.553 },
    {80,3.88 ,5223.69 },
    {44,3.7 ,2352.87 },
    {32,4,1577.34 }
    },

    {9,3.9 ,5507.55 },
    {6,1.73 ,5223.69 }
    }
    };
    我必须在每个元素中添加"L":

    {280.0L,3.199L,8.4334万.662L},

    否则编译器会将其转换为double,对吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,正确。 请阅读上述文件的6.4 第3节,了解有关长双表示的更多信息

    Sean
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢Sean的帮助,我想我必须在常量中添加"L"。