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 (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 语言编程常见问题解答:
为了创下记录、我在使用 MSVS 2022的 C#中尝试了同样的东西。
以下是相关代码:
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; } if (Status_ALU == 1) { alu_calculation = 5.9 * 2.7; richTextBox1.AppendText("=15.93 :: " + alu_calculation.ToString() + '\n'); if (alu_calculation == 15.93) { Status_ALU = 1; } } else { Status_ALU = 0; } alu_calculation = 5.9 * 2.7; richTextBox1.AppendText("=15.93 :: " + alu_calculation.ToString() + '\n');
结果如下:
您好、Keith、
我将执行定点计算。
感谢你的帮助。
对此,
Vijay