プロが教える店舗&オフィスのセキュリティ対策術

アドバイスをもとにいろんなサイトを見てみたんですが、なんとなくはわかるんですがこれから先どうしたら良いかわかりません。a,bを入力する画面まではいくんですが、それから先の結果がでないんです。何がいけないんですか?
#include <stdio.h>

double func(double x){
double y;

y=x*x*x-3*x*x+9*x-8;

return(y);
}

int main(){
double EPS=0.00005;
double a, b, c;
char t;
int i=0;

do{

printf(" a = ");
scanf("%lf%c", &a, &t);

printf(" b = ");
scanf("%lf%c", &b, &t);


if(func(a)*func(b) >= 0){
printf(" f(a)*f(b)>0\n\n");
}

}while(func(a)*func(b) >= 0);

if(b-a<0){
c=a;
a=b;
b=c;
}

while(b-a>EPS){

c=a-((b-a)/(func(b)-func(b)))*func(a);

if(func(c)*func(a)<0){
b=c;
}else{
a=c;
}

i++;
printf(" %d\t%20.15f\n",i,c);

}

A 回答 (4件)

下記の行で func(b)-func(b) は、ゼロになってしまいますよ。


c=a-((b-a)/(func(b)-func(b)))*func(a);
    • good
    • 0
この回答へのお礼

ありがとうございました。しかしfunc(b)-func(a)に直したところやはり何かがいけないようでうまくコンパイルされません。何がいけないんでしょうか・・

お礼日時:2005/02/16 01:38

>>c=a-((b-a)/(func(b)-func(a)))*func(a);



この式はどこからでてきたのでしょうか?

この式では(b-a)が0に近づいていきません。



#3さんのようにされてはいかが?
    • good
    • 0

コンパイルエラーなんかじゃなかったんですね。


失礼しました。

はさみうち法って、こんな感じではかなったんでしたっけ?

c=(a+b)/2;
if(func(a)*func(c)<0){
b=c;
}else{
a=c;
}
    • good
    • 0

なんていうコンパイルエラーが出てるのでしょうか。



最後の閉じカッコ '}' が足りないからでは?

この回答への補足

エラーが出るわけではなくて、a、bを入力するまではコンパイルされるのですが、肝心のyが0に近くなるときのxの値が計算されないのです・・。これでははさみうち法の意味が全くなくて・・。どうプログラムを変えたらよいですか?

補足日時:2005/02/16 10:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!