To go or not to go

Problem Description
LL is very lazy. Recently, he is assigned to a dormitory in the 5th floor and sometimes it's hard for him to decide whether to step out for some snack at night. So he choose two positive integers x, y and decide to go or not to go by the low bit of x (l is the length of x in binary representation). If it is "1", he choose to go and if it is "0", he stay in the dormitory.

Input
Each line contain two positive integers a and b (both not larger than 10^7 and a<=b). x is randomly chosen from [a,b]. No limit on y.

Output
For each case, output the probability (accurate to 6 fractional digits) of getting "1".

Sample Input
1 1
3 5

Sample Output
1.000000
0.666667

http://acm.hdu.edu.cn/showproblem.php?pid=2261

#include
int main()
{
int a, b;
double k;
while (scanf_s("%d%d", &a, &b)!=EOF)
{
if (a == b)
{

if (a & 1 == 1)
k = 1.0;
else
k = 0;
}
else
{
if ((b - a) & 1 == 1)
k = 0.5;
else
{
if (a & 1 == 1)
k = ((b - a) / 2.0 + 1) / (b - a + 1);
else
k = ((b - a) / 2.0) / (b - a + 1);
}
}
printf("%.6lf\n", k);
}
return 0;
}