#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-6;
template <typename A, typename B>
ostream& operator<<(ostream& os, const pair<A, B>& p) {
  return os << '{' << p.first << ',' << p.second << '}';
}
template <typename T>
struct point {
  T x, y;
  point(T xx = 0, T yy = 0) : x(xx), y(yy) {}
  T len2() const { return x * x + y * y; }
  double len() const { return sqrt(double(len2())); }
  bool operator==(const point<T>& p) const { return x == p.x && y == p.y; }
};
template <typename T>
point<T> operator+(const point<T>& a, const point<T>& b) {
  return point<T>(a.x + b.x, a.y + b.y);
}
template <typename T>
point<T> operator-(const point<T>& a, const point<T>& b) {
  return point<T>(a.x - b.x, a.y - b.y);
}
template <typename T>
T scal(const point<T>& a, const point<T>& b) {
  return a.x * b.x + a.y * b.y;
}
template <typename T>
T vect(const point<T>& a, const point<T>& b) {
  return a.x * b.y - a.y * b.x;
}
template <typename T>
ostream& operator<<(ostream& os, const point<T>& p) {
  return os << '(' << p.x << ',' << p.y << ')';
}
template <typename T>
T gcd(T a, T b) {
  return a > 0 ? gcd(b % a, a) : b;
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& c) {
  for (typename vector<T>::const_iterator it = c.begin(); it != c.end(); ++it) {
    os << *it << ',';
  }
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& c) {
  for (typename set<T>::const_iterator it = c.begin(); it != c.end(); ++it) {
    os << *it << ',';
  }
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const multiset<T>& c) {
  for (typename multiset<T>::const_iterator it = c.begin(); it != c.end();
       ++it) {
    os << *it << ',';
  }
  return os;
}
template <typename K, typename T>
ostream& operator<<(ostream& os, const multimap<K, T>& c) {
  for (typename multimap<K, T>::const_iterator it = c.begin(); it != c.end();
       ++it) {
    os << *it << ',';
  }
  return os;
}
template <typename K, typename T>
ostream& operator<<(ostream& os, const map<K, T>& c) {
  for (typename map<K, T>::const_iterator it = c.begin(); it != c.end(); ++it) {
    os << *it << ',';
  }
  return os;
}
int a[2][5];
const int maxhp = 210;
const int maxn = 1 << 15;
double d[2][maxn][maxhp];
int main() {
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 5; j++) {
      cin >> a[i][j];
    }
  }
  if (a[0][4] == 100) {
    puts("0");
    return 0;
  }
  if (a[1][4] == 100) {
    puts("1");
    return 0;
  }
  const int K = 5000;
  for (int t = 0; t < 2; t++) {
    d[t][0][0] = 1;
    for (int i = 0; i < K; i++) {
      for (int j = 0; j <= a[t ^ 1][0]; j++) {
        d[t][i + 1][j] += d[t][i][j] * a[t][4] * 0.01;
        double x = d[t][i][j] * (100 - a[t][4]) * 0.01;
        double z = a[t][3] - a[t][2] + 1;
        for (int l = a[t][2]; l <= a[t][3]; l++) {
          d[t][i + 1][min(a[t ^ 1][0], l + j)] += x / z;
        }
      }
    }
  }
  double win = 0;
  long long cur = 0;
  long long next[2] = {0, 0};
  int moves[2] = {0, 0};
  for (; cur < (1 << 18) && moves[0] < K - 2 && moves[1] < K - 2;) {
    cur = min(next[0], next[1]);
    if (cur == next[0]) {
      double alive = 1 - d[1][moves[1]][a[0][0]];
      double killedbefore = d[0][moves[0]][a[1][0]];
      double killednow = d[0][moves[0] + 1][a[1][0]];
      win += alive * (killednow - killedbefore);
      moves[0]++;
      next[0] += a[0][1];
    }
    if (cur == next[1]) {
      moves[1]++;
      next[1] += a[1][1];
    }
  }
  printf("%.12lf\n", double(win));
  return 0;
}
