Advertisement
a53

aprox

a53
May 10th, 2021
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream fin("aprox.in");
  4. ofstream fout("aprox.out");
  5. int m, mt[2][2], maxden, ai, t, sol11, sol12, sol21, sol22;
  6. long double x, startx, err1, err2;
  7. int main()
  8. {
  9. fin>>x;
  10. fin>>m;
  11. startx=x;
  12. maxden=m;
  13. mt[0][0]=mt[1][1]=1;
  14. mt[0][1]=mt[1][0]=0;
  15. ai=(int)x;
  16. while(mt[1][0]* ( ai = (int)x ) + mt[1][1]<=maxden)
  17. {
  18. t=(mt[0][0])*ai+mt[0][1];
  19. mt[0][1] = mt[0][0];
  20. mt[0][0] = t;
  21. t = mt[1][0] * ai + mt[1][1];
  22. mt[1][1] = mt[1][0];
  23. mt[1][0] = t;
  24. if(x==(long double)ai)
  25. break;
  26. x = 1/(x - (long double) ai);
  27. if(x>(long double)0x7FFFFFFFF)
  28. break;
  29. }
  30. err1 = startx - ((long double) mt[0][0]/(long double)mt[1][0]);
  31. sol11=mt[0][0];
  32. sol12=mt[1][0];
  33. ai = (maxden - mt[1][1]) / mt[1][0];
  34. mt[0][0] = mt[0][0] * ai + mt[0][1];
  35. mt[1][0] = mt[1][0] * ai + mt[1][1];
  36. err2 = startx - ((long double) mt[0][0] / (long double) mt[1][0]);
  37. sol21=mt[0][0];
  38. sol22=mt[1][0];
  39. if(fabs(err1) < fabs(err2))
  40. fout<<sol11<<" "<<sol12<<'\n';
  41. else
  42. fout<<sol21<<" "<<sol22<<'\n';
  43. return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement