1 | initial version |

First, you should notice that the factorization is done relative to the ring you considered. For example, since `sqrt(2)`

is not integer nor rational, you will see that `z^2-2`

s already factorized in `ZZ`

or `QQ`

:

```
sage: realpoly.<z> = PolynomialRing(QQ)
sage: factor(z^2-2)
z^2 - 2
sage: realpoly.<z> = PolynomialRing(ZZ)
sage: factor(z^2-2)
z^2 - 2
```

Second, `RR`

is a representation of real numbers by floating point approximation, hence, the factorization will be done here:

```
sage: realpoly.<z> = PolynomialRing(RR)
sage: factor(z^2-2)
(z - 1.41421356237310) * (z + 1.41421356237310)
sage: sol = z - factor(z^2-2)[0][0]
sage: sol
1.41421356237310
sage: sol in RR
True
sage: sol^2
2.00000000000000
sage: sol^2 == 2
False
```

The last equality is False because there is some very small rounding issue that make `sol^2`

not exactly equalt to `2`

(but very close):

```
sage: RR(sol^2).exact_rational()
4503599627370497/2251799813685248
```

So, if you want to deal with exact values, you have to use exact rings. In your case, the appropriate one is the field of real algebraic numbers `AA`

:

sage: realpoly.<z> = PolynomialRing(AA) sage: factor(z^2-2) (z - 1.414213562373095?) * (z + 1.414213562373095?) sage: sol = z - factor(z^2-2)[0][0] sage: sol^2 == 2 True sage: AA(sol) 1.414213562373095?

Here `AA(sol)`

is a genuine (exact) algebraic number, the floating point approximation is only a way to show it on your screen, this is indicated by the `?`

at the end of the representation.

2 | No.2 Revision |

First, you should notice that the factorization is done relative to the ring you considered. For example, since `sqrt(2)`

is not integer nor rational, you will see that `z^2-2`

s already factorized in `ZZ`

or `QQ`

:

`sage: `~~realpoly.<z> ~~integerpoly.<z> = PolynomialRing(QQ)
sage: factor(z^2-2)
z^2 - 2
sage: ~~realpoly.<z> ~~rationalpoly.<z> = PolynomialRing(ZZ)
sage: factor(z^2-2)
z^2 - 2

Second, `RR`

is a representation of real numbers by floating point approximation, hence, the factorization will be done here:

```
sage: realpoly.<z> = PolynomialRing(RR)
sage: factor(z^2-2)
(z - 1.41421356237310) * (z + 1.41421356237310)
sage: sol = z - factor(z^2-2)[0][0]
sage: sol
1.41421356237310
sage: sol in RR
True
sage: sol^2
2.00000000000000
sage: sol^2 == 2
False
```

The last equality is False because there is some very small rounding issue that make `sol^2`

not exactly equalt to `2`

(but very close):

```
sage: RR(sol^2).exact_rational()
4503599627370497/2251799813685248
```

So, if you want to deal with exact values, you have to use exact rings. In your case, the appropriate one is the field of real algebraic numbers `AA`

:

sage: realpoly.<z>

```
sage: algebraicpoly.<z> = PolynomialRing(AA)
sage: factor(z^2-2)
(z - 1.414213562373095?) * (z + 1.414213562373095?)
sage: sol = z - factor(z^2-2)[0][0]
sage: sol^2 == 2
True
sage: AA(sol)
```~~1.414213562373095?~~1.414213562373095?

Here `AA(sol)`

is a genuine (exact) algebraic number, the floating point approximation is only a way to show it on your screen, this is indicated by the `?`

at the end of the representation.

3 | No.3 Revision |

First, you should notice that the factorization is done relative to the ring you considered. For example, since `sqrt(2)`

is not integer nor rational, you will see that `z^2-2`

s already factorized in `ZZ`

or `QQ`

:

```
sage: integerpoly.<z> = PolynomialRing(QQ)
sage: factor(z^2-2)
z^2 - 2
sage: rationalpoly.<z> = PolynomialRing(ZZ)
sage: factor(z^2-2)
z^2 - 2
```

Second, `RR`

is a representation of real numbers by floating point approximation, hence, the factorization will be done here:

```
sage: realpoly.<z> = PolynomialRing(RR)
sage: factor(z^2-2)
(z - 1.41421356237310) * (z + 1.41421356237310)
sage: sol = z - factor(z^2-2)[0][0]
sage: sol
1.41421356237310
sage: sol in RR
True
sage: sol^2
2.00000000000000
sage: sol^2 == 2
False
```

The last equality is False because there is some very small rounding issue that make `sol^2`

not exactly equalt to `2`

(but very close):

```
sage: RR(sol^2).exact_rational()
4503599627370497/2251799813685248
```

So, if you want to deal with exact values, you have to use exact rings. In your case, the appropriate one is the field of real algebraic numbers `AA`

:

```
sage: algebraicpoly.<z> = PolynomialRing(AA)
sage: factor(z^2-2)
(z - 1.414213562373095?) * (z + 1.414213562373095?)
sage: sol = z - factor(z^2-2)[0][0]
sage: sol^2 == 2
True
sage: AA(sol)
1.414213562373095?
```

Here `AA(sol)`

is a genuine (exact) algebraic number, the floating point approximation is only a way to show it on your screen, this is indicated by the `?`

at the end of the representation.

There are plans to use some Galois theory to represent some algebraic numbers with radicals (to see `sqrt(2)`

instead of `1.414213562373095?`

). But it is not done yet, see this trac ticket.

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.