2011-05-31 24 views
5

Bu Sin (x) işlevi için yerel maksimum değeri 0 ila 3.1416 aralığında bulmak istiyorum. Fakat her zaman 0 değerini maksimum değer olarak gösterir.i.e Maksimum değer = 0; Lütfen hatalarımı bulmama yardım et.Yerel Maksimum değeri bulma C

Teşekkürler.

#include<stdio.h> 
#include<math.h> 
#include<stdlib.h> 
#ifndef max 
    #define max(a,b) ((a)>(b)?(a):(b)) 
#endif 
double f(double x){ 
return sin(x); 
} 
double bisection(double a,double b) 
{ 
double Fa=f(a); 
double Fb=f(b); 
double midpoint=(a+b)/2; 
double Fmidpoint=f(midpoint); 
while(abs(b-a)>1e-6){ 
double left=(a+midpoint)/2; 
double right=(b+midpoint)/2; 
double Fleft=f(left); 
double Fright=f(right); 
if(midpoint>max(Fleft,Fright)){ 
    a=left; 
    Fa=Fleft; 
    b=right; 
    Fb=Fright; 
} 
else{ 
    if(Fleft>Fright) 
    { 
     b=midpoint; 
     Fb=Fmidpoint; 
     midpoint=left; 
     Fmidpoint=Fleft; 
    } 
    else{ 
     a=midpoint; 
     Fa=Fmidpoint; 
     midpoint=right; 
     Fmidpoint=Fright; 
    } 
} 
} 
return midpoint; 
} 
int main(){ 
double maximum; 
double rangeleft=0; 
double rangeright=3.1416; 
maximum=bisection(rangeleft,rangeright); 
printf("%d",maximum); 
return 0; 
} 

cevap

3

printf işlevini çağırırken bir hatayla karşılaştınız.

%d biçimindeki tanımlayıcı burada kullanılmamalıdır, çünkü maximum değişkeniniz çift ise printf bir tamsayı vermelidir.

%f kullanın ve programınız 1.5708 olan çıktı olacaktır.

Wikipedia ürünündeki tüm olası printf biçim tanımlayıcılarının listesini bulabilirsiniz.

+0

teşekkür onu gördüm vermedi ...çok teşekkürler – Gorge

2

bunu hata ayıklama ulaşırsa, değişkenler doğru değere sahip olduğunu görüyoruz, bu yüzden sorun bu değer % d duble gelen kılan baskı içinde olmalıdır - tamsayı - Kullanım% f

İlgili konular