You can perform binary operations on a Fraction just like you can ints or floats!

Add two fractions:

```
>>> Fraction(1, 2) + Fraction(3, 4)
Fraction(5, 4)
```

So that's pretty great, but you can also mix in integers or floats. But as you might expect - adding an integer returns a Fraction object while adding a float returns a float.

```
>>> Fraction(5, 16) + 3
Fraction(53, 16)
>>> Fraction(5, 16) + 3.0
3.3125
```

Here are some examples of other binary operations:

```
>>> Fraction(5, 16) - Fraction(1, 4)
Fraction(1, 16)
>>> Fraction(1, 16) * Fraction(3, 16)
Fraction(3, 256)
>>> Fraction(3, 16) / Fraction(1, 8)
Fraction(3, 2)
```

Now let's try with exponentiation:

```
>>> Fraction(1, 8) ** Fraction(1, 2)
0.3535533905932738
```

It returns a float probably because the fraction is impossible to calculate within reason. We can actually use the **limit_denominator** method to get a semi-accurate Fraction as a result.

```
>>> f = Fraction(1, 8) ** Fraction(1, 2)
>>> Fraction(f).limit_denominator()
Fraction(235416, 665857)
```

Keep in mind you can mix in strings and other data types upon instantiation:

```
>>> Fraction("1/2") + Fraction(2.0)
Fraction(5, 2)
>>> Fraction(2) * Fraction(" 1/2 ")
Fraction(1, 1)
```