1 | initial version |

The fact that `f(n)`

shows `5.000000000000000`

is just a printing artifact, there is no rounding, you can check that `f(n)`

is equal to `n`

and different from 5:

```
sage: n == f(n)
True
```

Even `n`

itself is represented as `5.000000000000000`

, not `=5.0000000000000001`

:

```
sage: n=5.0000000000000001
sage: n
5.000000000000000
sage: n-5
1.110223024625157e-16
```

2 | No.2 Revision |

The fact that `f(n)`

shows `5.000000000000000`

is just a printing artifact, there is no rounding, you can check that `f(n)`

is equal to `n`

and different from 5:

```
sage: n == f(n)
True
```

Even `n`

itself is represented as `5.000000000000000`

, not

:~~=5.0000000000000001~~5.0000000000000001

```
sage: n=5.0000000000000001
sage: n
5.000000000000000
sage: n-5
1.110223024625157e-16
```

**EDIT** Here is a way to print more digits of `n`

```
sage: n.str(truncate=False)
'5.000000000000000111'
```

You might be scary with the two additional `1`

at the end. This is because internally, numbers are represented in binary, and you proposed a number which is exact in base 10, but not in base 2, hence some rounding (not only in the printing, but also in the representation of n in the machine).

You can get the exact value of the rounded `n`

as follows:

```
sage: n.exact_rational()
45035996273704961/9007199254740992
```

And even see its internal representation:

```
sage: n.sign_mantissa_exponent()
(1, 90071992547409922, -54)
```

And check

```
sage: 90071992547409922*2^(-54)
45035996273704961/9007199254740992
```

You can print the non-truncated expression of `n`

as follows:

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.