2.1.c 961 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include <stdio.h>
  2. #include <math.h>
  3. float getNAN();
  4. float Abs(float);
  5. #define MY_FLOAT_MIN 0.0000000000000000000000000000000000000000000014012984643248170709237295832899161312802619418765157718f
  6. #define MY_FLOAT_MAX 340282346638528859811704183484516925440.000000f
  7. #define MY_FLOAT_MIN -340282346638528859811704183484516925440.000000f
  8. int main()
  9. {
  10. float nan = -getNAN();
  11. float f = 1.0;
  12. float k = 2.0;
  13. while(1==1)
  14. {
  15. float oldf=f;
  16. f-=Abs(k*f);
  17. if (f==oldf)
  18. {
  19. printf("f is stuck %f \n",f);
  20. k*=.5;
  21. }
  22. if(f==nan)
  23. {
  24. printf("f is nan \n");
  25. k*=.5;
  26. printf("k is nan %4.100f \n",k);
  27. f=oldf;
  28. }
  29. if (k == 0)
  30. {
  31. printf ("k is 0 \n");
  32. printf("%f \n",f);
  33. return (0);
  34. }
  35. printf(":( %f \n",f);
  36. }
  37. }
  38. float Abs(float f)
  39. {
  40. return (f >= 0) ? f : -f;
  41. }
  42. /*** return NAN ***/
  43. float getNAN()
  44. {
  45. float n = 1.0;
  46. for (int i =0; i<149; i++)
  47. {
  48. printf("iterating %f \n", n);
  49. n*=2;
  50. }
  51. return n;
  52. }