vs2008中的方程式演算错误
Error in equation calculus in vs2008
我在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
正如预期的那样。
请注意,在调试器中逐步执行代码会让你的错误立即变得显而易见——如果你不知道如何做到这一点,那么现在是开始学习一些基本调试技能的好时机。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- vs2008中的方程式演算错误