Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MartyMcfly en 4 Mayo 2011, 19:49 pm



Título: Floating point error:Divide by 0.
Publicado por: MartyMcfly en 4 Mayo 2011, 19:49 pm
Abnormal program termination
El problema es que segun yo no enmcuentro ningun erro en la logica las operaciones son las correctas. El programa consiste en aproximar raices por el metodo de punto secante eh estado checando y si borro las operaciones que realiza en if(c==2) if(f>1),y las de if(c==3) y if(c==2) cuandpo borro las operaciones que realiza en estas sentencias el programa no produce el Abnormal program termination crei que era por que realizaba muchas operaciones en los parentesis pero hice las operaciones por partees y me sigue lanzando ese error.
Investigue en internet y la verda no entendi muy hablan que las soluciones de IEEE donde los datos de punto fijo estandarizado sirven para este tipo de casos pero que en c++ no existe uno que soporte este tipo de errores aritmeticos bueno qui les dejo mi programa, el programa ovimente no tiene errores en cuanto a las sentenscias y su correcta escritura de que corre corre pero aborta los resultados debido a ese error ya que es mas bien un error de la logica computacional:

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<math.h>
  4. void main()
  5. {
  6. int x,lm,co,f,c,fil=4;
  7. float x0,x1,ax,tb[50][50];
  8. clrscr();
  9. printf("Dame el valor de la x0=");
  10. scanf("%f",&x0);
  11. printf("Dame el valor de la x1=");
  12. scanf("%f",&x1);
  13. printf("¨Cual es el porcentaje de error limite ? ");
  14. scanf("%i",&lm);   ax=lm;
  15. for(f=0;f<50;f++){ if(ax>=lm){ x=f;
  16. for(c=0;c<5;c++) {
  17. if(c==0) { tb[f][c]=f; }
  18. if(c==1) {tb[f][c]=f;}
  19. if(c==2) { if(f==0){ tb[f][c]=x0; }if(f==1){ tb[f][c]=x1; }
  20. if(f>1){ tb[f][c]=tb[f-1][2]-(((tb[f-1][3])*(tb[f-2][2]-tb[f-1][2]))/(tb[f-2][3]-tb[f-1][3]));}}
  21. if(c==3) { tb[f][c]=(exp(tb[f][2]*tb[f][2]))-tb[f][2]; }
  22. if(c==4) { ax=((tb[f][2]-tb[f-1][2])/tb[f][2])*100;
  23. if(ax<0){ax=ax*-1;}tb[f][c]=ax;}
  24. }
  25. }
  26. else{break;}
  27. }
  28. for(f=0;f<=x;f++){ co=7; fil=fil+2;
  29. for(c=0;c<5;c++) {
  30. gotoxy(co,fil);
  31. printf("%f",tb[f][c]); co=co+10; }}
  32.  
  33. getch();
  34. }
  35.  


Título: Re: Floating point error:Divide by 0.
Publicado por: Acermax en 4 Mayo 2011, 21:17 pm
El error es muy claro, intentas hacer una división por 0, así que hay algo que no funciona como quieres, te recomiendo que lo depures y vayas echandole un vistazo a las cosas.