我正在尝试创建一个找到方程根的程序。关于我的程序的一切工作都很好,除了方程本身:它会一直返回错误的值(1,无穷大,0,......)。
这是我正在评估的功能:
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
例如,f(.3)应该是.287,但它返回1.000。奇怪的是,我前一段时间在另一台计算机上尝试过完全相同的代码并且工作得很好。
答案 0 :(得分:7)
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
请找到一个更好的编译器,并打开警告。
答案 1 :(得分:0)
可能你应该投射你的变量。这通常发生在我的分歧上。
答案 2 :(得分:0)
double f(double x) {
......
}
答案 3 :(得分:0)
#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'