#include <bits/stdc++.h>
using namespace std;
int n;
struct point {
  int x, y;
};
point ps[100005];
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
double mm[505];
void prepare() {
  mm[250] = 1;
  for (int i = 251; i < 500; i++) mm[i] = mm[i - 1] * 2;
  for (int i = 249; i >= 0; i--) mm[i] = mm[i + 1] / 2;
}
double mi(int x) { return mm[250 + x]; }
double dd;
void baoli() {
  int i, j, g;
  double p, s;
  double ans = 1;
  dd = mi(n) - 1 - n - (double)n * (n - 1) / 2;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      if (i != j) {
        p = 1;
        s = (double)ps[i].x * ps[j].y - (double)ps[i].y * ps[j].x;
        s /= 2;
        int k = j - i;
        if (k < 0) k += n;
        p = (double)(mi(n - k - 1) - 1) / dd;
        g = abs(gcd(ps[i].y - ps[j].y, ps[i].x - ps[j].x));
        ans = ans + (s - (double)g / 2) * p;
      }
  printf("%.10lf\n", ans);
}
void solve() {
  int i, j, k, g;
  double p, s;
  double ans = 1;
  for (i = 0; i < n; i++)
    for (k = 1; k < 100; k++) {
      j = (i + k) % n;
      s = (double)ps[i].x * ps[j].y - (double)ps[i].y * ps[j].x;
      s /= 2;
      p = mi(-k - 1);
      g = abs(gcd(ps[i].y - ps[j].y, ps[i].x - ps[j].x));
      ans = ans + (s - (double)g / 2) * p;
    }
  printf("%.10lf\n", ans);
}
int main() {
  prepare();
  scanf("%d", &n);
  int i;
  for (i = 0; i < n; i++) scanf("%d%d", &ps[i].x, &ps[i].y);
  if (n < 120)
    baoli();
  else
    solve();
  return 0;
}
