|  | 
|  | 
| вернуться в форум | Precision problem... again Послано Vlad  25 янв 2014 01:54#include <iostream>#include <fstream>
 #include <cmath>
 #define PI 3.14159265358979323846
 using namespace std;
 
 #ifndef ONLINE_JUDGE
 #define cin fin
 ifstream fin("input");
 #endif
 
 double N, R;
 
 int main() {
 cin >> N >> R;
 N /= 2.0;
 
 if (R <= N) {
 cout << PI * R * R << '\n';
 return 0;
 }
 if (R >= N * sqrt(2.0)) {
 cout << 4.0 * N * N << '\n';
 return 0;
 }
 
 double A, B, C;
 A = N;
 C = R;
 B = sqrt(C * C - A * A);
 double angle = 90.0 - (acos(A / C) * 180.0 / PI) * 2.0;
 
 printf("%.3lf\n", 4.0 * (A * B + PI * R * R * angle / 360.0));
 }
 
 This program works fine on all the tests I saw on the forum. But I get WA #1 probably because of the wrong precision. I printed the value with 4 and 6 decimals but I get the same WA #1.
 Could anyone tell me please how can I solve the "error" ? It's annoying to have a good solution and take WA.
 Thanks a lot!
 
 
 LATER EDIT:
 It seems I succeeded with such a function:
 
 inline void precise(double X, const int &decimals) {
 cout << (int)(X);
 cout << '.';
 X = X - (int)(X);
 for (int i = 1; i <= decimals; ++i) {
 X = X * 10.0;
 cout << (int)(X);
 X = X - (int)(X);
 }
 cout << '\n';
 }
 
 ...
 
 precise((double)(4.0 * (A * B + PI * R * R * angle / 360.0)), 3);
 
 Have fun!
 
 Edited by author 25.01.2014 04:19
 | 
 | 
|