2

方程式の根を求めるプログラムを作成しようとしています。方程式自体を除いて、プログラムに関するすべてが正常に機能します。間違った値 (1、無限大、0、...) を返し続けます。

これは私が評価している関数です:

double f(x) {
    return exp(-x)-sin(M_PI*x/2.);
}

たとえば、f(.3) は .287 のはずですが、1.000 を返します。奇妙なことに、まったく同じコードを別のコンピューターで少し前に試してみたところ、問題なく動作しました。

4

4 に答える 4

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

より優れたコンパイラを見つけて、警告をオンにしてください。

于 2013-05-28T00:58:12.447 に答える
0

おそらく、変数をキャストする必要があります。それは通常、部門で私に起こります。

于 2013-05-28T00:51:11.233 に答える
0
double f(double x) {
 ......
}
于 2013-05-28T00:52:58.823 に答える
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'

于 2013-05-28T00:56:23.530 に答える