我試圖做一個程序,找到方程的根。關於我的程序的一切工作都很好,除了公式本身:它不斷返回錯誤的值(1,無窮大,0,...)。函數沒有返回正確的值C
這是我評價功能:
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
例如,F(0.3)應該是0.287,但它返回1.000。奇怪的是,我前一段時間在另一臺計算機上嘗試了完全相同的代碼,並且它工作得很好。
我試圖做一個程序,找到方程的根。關於我的程序的一切工作都很好,除了公式本身:它不斷返回錯誤的值(1,無窮大,0,...)。函數沒有返回正確的值C
這是我評價功能:
double f(x) {
return exp(-x)-sin(M_PI*x/2.);
}
例如,F(0.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;
}
結果: 」 0.3 = 0.286828'
什麼是函數簽名? '雙f(x)'形成了病態。 – Elazar
@Elazar:截至C90,它並沒有形成病態;它是一種舊式(ANSI之前的)定義,'x'類型默認爲'int'。從C99開始,「implicit'int'」規則被刪除,並且違反約束條件,需要診斷。 –
@KeithThompson謝謝。你可以從我的答案中看到,我知道default-to-int - 或者可能已經猜到了,因爲* everything *默認爲int,出於某種原因...我假設f(x){}是一個格式良好的函數,它獲得一個'int'並返回一個'int':P。我很樂意知道K&R的想法。 – Elazar