我正在尝试制作一个找到方程根的程序。关于我的程序的一切工作都很好,除了方程本身:它一直返回错误的值(1,无穷大,0,...)。
这是我正在评估的功能:
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
例如,f(.3) 应该是 0.287,但它返回 1.000。奇怪的是,我不久前在另一台计算机上尝试了完全相同的代码,它工作得很好。
我正在尝试制作一个找到方程根的程序。关于我的程序的一切工作都很好,除了方程本身:它一直返回错误的值(1,无穷大,0,...)。
这是我正在评估的功能:
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
例如,f(.3) 应该是 0.287,但它返回 1.000。奇怪的是,我不久前在另一台计算机上尝试了完全相同的代码,它工作得很好。
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
x 的类型未声明,因此默认为int
.
你通过.3
了,所以它被强制int
变为0。
exp(-0)-sin(M_PI*0/2.) == exp(0)-sin(0) == 1.0-0 == 1.0
请给自己找一个更好的编译器,并打开警告。
可能你应该转换你的变量。这通常发生在我的分裂中。
double f(double x) {
......
}
#include <stdio.h>
#include <math.h>
double f(double x) {
return exp(-x)-sin(M_PI*x/2.);
}
int main(void){
printf(".3 = %f",f(.3));
getchar();
return 0;
}
结果:'.3 = 0.286828'