TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] MSP430FR59941:计算误差

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1199169/msp430fr59941-calculation-error

器件型号:MSP430FR59941

您好!

我将在 CCS (Code Composer Studio)中执行一些计算。 当变量声明为浮点或双精度数时、计算会产生不准确的结果。

如何解决问题。

ALL_calculation_7.7 + 2.4 = 10.1  

ALL_calculation_9.8 - 5.6 = 4.2000000000000011 (错误)

ALL_calculation_5.9 * 2.7 = 15.930000000000001 (错误)

这是代码:

//

静态无符号 int Status_ALU = 0;
double alu_calculation_0.000;

ALL_calculation_=7.7 + 2.4;

if (alu_calculation_=10.100000)

ALL_calculation_0.000;
ALL_calculation_=9.8 - 5.6;

if (alu_calculation_=4.2)

STATUS_ALU = 1;


其他

STATUS_ALU = 0;

if (Status_ALU = 1)

ALL_calculation_5.9 * 2.7;

if (alu_calculation_=15.93)

STATUS_ALU = 1;


其他

STATUS_ALU = 0;

//

对此,

Vijay

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

    欢迎使用浮点。 浮点值和双精度值只是近似值、即它们不是无限精度、您可以预期舍入和转换错误。 正如一位 Kernigham 和 Pl搅 龙所说的:"使用浮点就像移动沙堆一样。 每次移动时、您都会失去一点沙子、并添加一点污垢。"

    您需要处理您拥有的重要数字。

    如果您确实希望使用此类数字获得更高的精度、则可能需要切换到定点、无论如何、这种方法会更快。

    请阅读有关浮点的 C 语言编程常见问题解答:

    https://c-faq.com/fp/index.html

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

    为了创下记录、我在使用 MSVS 2022的 C#中尝试了同样的东西。

    以下是相关代码:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int Status_ALU = 0;
    double alu_calculation = 0.000;
    alu_calculation = 7.7 + 2.4;
    richTextBox1.AppendText("=10.1 :: " + alu_calculation.ToString() + '\n');
    if (alu_calculation == 10.100000)
    {
    alu_calculation = 0.000;
    alu_calculation = 9.8 - 5.6;
    richTextBox1.AppendText("=4.2 :: " + alu_calculation.ToString() + '\n');
    if (alu_calculation == 4.2)
    {
    Status_ALU = 1;
    }
    }
    else
    {
    Status_ALU = 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    结果如下:

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

    您好、Keith、

    我将执行定点计算。

    感谢你的帮助。

    对此,

    Vijay