我在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("\n\n\nsum=%lg sum1=%lg",sum,sum1);
}
结果:
sum=99.0076 sum1=99.1369
它发生在调试模式下以及在运行模式下执行.exe之后。
答案 0 :(得分:1)
您在第一种情况下修改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("\n\n\nsum=%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("\n\n\nsum=%lg sum1=%lg",sum,sum1);
}
无论哪种方式,这都给出了:
sum=99.0076 sum1=99.0076
正如所料。
请注意,单步执行调试器中的代码会使您的错误立即显而易见 - 如果您不知道如何执行此操作,那么现在是开始学习一些基本调试技能的好时机。