func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Point {     double x, y;   };   Point points[100000];   int gcd(int a, int b) {     if (b) return gcd(b, a % b);     return a;   }   int main() {     int n;     while (scanf( %d , &n) != EOF) {       long double A = 0.0;       long double b = 0.0;       for (int i = int(0); i < int(n); i++) {         scanf( %lf %lf , &points[i].x, &points[i].y);       }       long double totProb = 1.0;       if (n < 60) {         totProb = pow(2., n) - n * (n - 1) / 2. - n - 1;         for (int i = int(0); i < int(n); i++) {           for (int j = int(1); j < int(n); j++) {             int k = (i + j) % n;             long double prob = pow(2, n - j - 1) - 1.;             A += prob * (points[i].x * points[k].y - points[k].x * points[i].y);             b += prob * gcd(abs(points[i].x - points[k].x),                             abs(points[i].y - points[k].y));           }         }       } else {         for (int i = int(0); i < int(n); i++) {           for (int j = int(1); j < int(60); j++) {             int k = (i + j) % n;             long double prob = pow(2, -j - 1);             A += prob * (points[i].x * points[k].y - points[k].x * points[i].y);             b += prob * gcd(abs(points[i].x - points[k].x),                             abs(points[i].y - points[k].y));           }         }       }       double ans = (A - b) / totProb / 2. + 1.;       printf( %.12lf n , ans);     }     return 0;   }   