2011-05-31 14 views
5

Me gustaría encontrar el máximo local dentro del intervalo de 0 a 3.1416 para esta función Sin (x). Pero muestra siempre 0 como el valor máximo.i.e El valor máximo = 0; Por favor, ayúdame a encontrar mis fallas.Encontrar el máximo local en C

gracias.

#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; 
} 

Respuesta

3

Tiene un error al llamar a la función printf.

No debe usar el identificador de formato %d aquí porque significa que printf debe generar un número entero mientras que la variable maximum es doble.

Use %f y su programa generará 1.5708 que es correcto.

Puede encontrar la lista de todos los posibles identificadores de formato printf en Wikipedia.

+0

Gracias Yo no lo vi ...muchas gracias – Gorge

2

Si desea depurarlo, se podía ver que las variables tienen valor correcto, por lo que un problema debe por en la impresión de este valor % d hace desde su doble - entero - el uso% f

Cuestiones relacionadas