import java.math.BigDecimal;
public class B {
long z, n;
B(double d) {
BigDecimal d2 = BigDecimal.valueOf(d);
int s = d2.scale();
z = d2.movePointRight(s).longValue();
n = BigDecimal.ONE.movePointRight(s).longValue();
}
B(long z, long n) {
this.z = z;
this.n = n;
}
B add(B b) {
long c = Math.abs(n), d = Math.abs(b.n);
while (c > 0 && d > 0) {
if (c > d)
c = c % d;
else
d = d % c;
}
long ggt = c + d;
if (n < b.n) {
return new B(z * ggt + b.z, b.n);
} else {
return new B(z + b.z * ggt, n);
}
}
B su(B b) {
long c = Math.abs(n), d = Math.abs(b.n);
while (c > 0 && d > 0) {
if (c > d)
c = c % d;
else
d = d % c;
}
long ggt = c + d;
if (n < b.n) {
return new B(z * ggt - b.z, b.n);
} else {
return new B(z - b.z * ggt, n);
}
}
B mul(B b) {
return new B(z * b.z, n * b.n);
}
B div(B b) {
long c = Math.abs(n), d = Math.abs(b.n);
while (c > 0 && d > 0) {
if (c > d)
c = c % d;
else
d = d % c;
}
long ggt = c + d;
if (n < b.n) {
return new B(z * ggt * b.z, b.n);
} else {
return new B(z * b.z * ggt, n);
}
}
@Override
public String toString() {
BigDecimal d2 = BigDecimal.valueOf(z);
d2 = d2.divide(BigDecimal.valueOf(n));
d2 = d2.setScale(5, BigDecimal.ROUND_HALF_UP);
return d2.toString();
}
public static void main(String[] args) {
System.out.println(new B(1, 2).add(new B(1, 4)).su(new B(1, 2)).mul(new B(1, 8)).div(new B(1, 16)));
}
}