Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("aprox.in");
- ofstream fout("aprox.out");
- int m, mt[2][2], maxden, ai, t, sol11, sol12, sol21, sol22;
- long double x, startx, err1, err2;
- int main()
- {
- fin>>x;
- fin>>m;
- startx=x;
- maxden=m;
- mt[0][0]=mt[1][1]=1;
- mt[0][1]=mt[1][0]=0;
- ai=(int)x;
- while(mt[1][0]* ( ai = (int)x ) + mt[1][1]<=maxden)
- {
- t=(mt[0][0])*ai+mt[0][1];
- mt[0][1] = mt[0][0];
- mt[0][0] = t;
- t = mt[1][0] * ai + mt[1][1];
- mt[1][1] = mt[1][0];
- mt[1][0] = t;
- if(x==(long double)ai)
- break;
- x = 1/(x - (long double) ai);
- if(x>(long double)0x7FFFFFFFF)
- break;
- }
- err1 = startx - ((long double) mt[0][0]/(long double)mt[1][0]);
- sol11=mt[0][0];
- sol12=mt[1][0];
- ai = (maxden - mt[1][1]) / mt[1][0];
- mt[0][0] = mt[0][0] * ai + mt[0][1];
- mt[1][0] = mt[1][0] * ai + mt[1][1];
- err2 = startx - ((long double) mt[0][0] / (long double) mt[1][0]);
- sol21=mt[0][0];
- sol22=mt[1][0];
- if(fabs(err1) < fabs(err2))
- fout<<sol11<<" "<<sol12<<'\n';
- else
- fout<<sol21<<" "<<sol22<<'\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement