vs2008中的方程式演算错误

Error in equation calculus in vs2008

本文关键字:演算 错误 方程式 vs2008      更新时间:2023-10-16

我在C++VS2008-SP1中制作了以下简单代码:

    {
    double sum,sum1,x=0.5,k=0.12;
    sum=100.0;
    x=sqrt(1.0-k*x*x)+1.0;
    sum=sum-0.5*x;
    sum1=100.0;
    sum1=sum1-0.5*(sqrt(1.0-k*x*x)+1.0);
    printf("nnnsum=%lg sum1=%lg",sum,sum1);
    }

结果:

sum=99.0076 sum1=99.1369

它发生在调试模式下,也发生在运行模式下执行.exe之后。

在第一种情况下修改x,然后在第二种情况下再次使用它-将代码更改为:

{
    double sum,sum1,x=0.5,k=0.12;
    sum=100.0;
    x=sqrt(1.0-k*x*x)+1.0;
    sum=sum-0.5*x;
    x = 0.5; // <<< reset x to its initial value!!!
    sum1=100.0;
    sum1=sum1-0.5*(sqrt(1.0-k*x*x)+1.0);
    printf("nnnsum=%lg sum1=%lg",sum,sum1);
}

或者,您可以使用另一个变量作为临时值:

{
    double sum,sum1,x=0.5,k=0.12,y; // <<< use a different variable as a temporary
    sum=100.0;
    y=sqrt(1.0-k*x*x)+1.0;          // <<<
    sum=sum-0.5*y;                  // <<<
    sum1=100.0;
    sum1=sum1-0.5*(sqrt(1.0-k*x*x)+1.0);
    printf("nnnsum=%lg sum1=%lg",sum,sum1);
}

无论哪种方式,这都会给出:

sum=99.0076 sum1=99.0076

正如预期的那样。

请注意,在调试器中逐步执行代码会让你的错误立即变得显而易见——如果你不知道如何做到这一点,那么现在是开始学习一些基本调试技能的好时机。