#include <cstdio>#include <algorithm>#include <cstdlib>#include <cstring>#include <iostream>using namespace std;inline int gi(){ char tmp=getchar();int ans=0; while(!isdigit(tmp)) tmp=getchar(); while(isdigit(tmp)){ ans = ans * 10 + tmp - '0'; tmp = getchar(); } return ans;} const int N = 1500;double F[N][N];double Dfs(int a,int b){ if(a<0 || b<0) return 0.0; if(!a && !b) return 0.0; if(!a) return 1.0; if(!b) return 0.0; if(F[a][b]) return F[a][b]; int i=a,j=b; double c1 = 1.0 * j / (1.0 * i + j); double c3=0,c4=0; if(i+j == 2) return F[a][b]=c1; // black or white c3 = 1.0*i/(i+j) * (i-1)/(i+j-1) * (i-2)/(i+j-2) * Dfs(i-3,j); c4 = 1.0 * i/(i+j) * (i-1)/(i+j-1) * j/(i+j-2) * Dfs(i-2,j-1); return F[a][b] = double(c1 + c3 + c4);}signed main(){ int a,b; a=gi(),b=gi(); printf("%.9lf",Dfs(b,a)); return 0;}