/*
八重循环
何止暴力也!
*/
#define LOCAL
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<iomanip>
#include<string>
#include<algorithm>
#include<ctime>
#include<stack>
#include<queue>
#include<vector>
#define N 10005
using namespace std;
int main()
{
#ifdef LOCAL
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int i,j,a,b,c,d,e,f,g,h,defender,attacker,point[9][50];double pro[9][50],sum;
memset(point,0,sizeof(point));
for(a=1;a<=6;a++) //累计各个数量(1-8)的骰子出现各个点数的次数
{
for(b=1;b<=6;b++)
{
for(c=1;c<=6;c++)
{
for(d=1;d<=6;d++)
{
for(e=1;e<=6;e++)
{
for(f=1;f<=6;f++)
{
for(g=1;g<=6;g++)
{
for(h=1;h<=6;h++)
{
point[8][a+b+c+d+e+f+g+h]++;
}
point[7][a+b+c+d+e+f+g]++;
}
point[6][a+b+c+d+e+f]++;
}
point[5][a+b+c+d+e]++;
}
point[4][a+b+c+d]++;
}
point[3][a+b+c]++;
}
point[2][a+b]++;
}
point[1][a]++;
}
for(i=1;i<=8;i++)//计算各个数量(1-8)的骰子出现各个点数的概率
{
for(j=1;j<=6*i;j++)
{
pro[i][j]=point[i][j]/pow(6.0,i);
}
}
while(~scanf("%d%d",&attacker,&defender))
{
sum=0;
for(i=1;i<=6*attacker;i++)//计算累计概率 注意第二个for循环的控制
for(j=1;j<(i<(defender*6+1)?i:(defender*6+1));j++)
sum+=pro[attacker][i]*pro[defender][j];
printf("%.16lf\n",sum);
}
return 0;
}