方程式の根を求めるプログラムを作成しようとしています。方程式自体を除いて、プログラムに関するすべてが正常に機能します。間違った値 (1、無限大、0、...) を返し続けます。
これは私が評価している関数です:
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
たとえば、f(.3) は .287 のはずですが、1.000 を返します。奇妙なことに、まったく同じコードを別のコンピューターで少し前に試してみたところ、問題なく動作しました。
方程式の根を求めるプログラムを作成しようとしています。方程式自体を除いて、プログラムに関するすべてが正常に機能します。間違った値 (1、無限大、0、...) を返し続けます。
これは私が評価している関数です:
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
たとえば、f(.3) は .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'