# exact computations with algebraic numbers

I'm trying to do exact computations with algebraic numbers. In particular, I know to expect integer answers like 1, 0, and 3 at the end of my computations, but I'm getting something slightly off.

I noticed that if I run

sage: r = sqrt(2)
sage: a = AA(r)
sage: b = AA(1/r)
sage: c = a*b


Then I get:

sage: c
1.000000000000000?


Is this being handled in the computer as exactly 1? Otherwise, how can I do exact computations with algebraic numbers in Sage? I obtain the algebraic numbers I'm working with using algdep() to find a polynomial and .roots(QQbar) to find the roots of that polynomial.

edit retag close merge delete

Sort by » oldest newest most voted Yes, it is exact. To check:

sage: c.minpoly() # minimal polynomial over QQ
x - 1
1

more

Computations in algebraic numbers are costly so Sage computes the product of a and b "lazily".

Some computations force it to realise the exact value of c.

Here are the one I would favour.

sage: c = AA(r) * AA(1/r)
sage: c
1.000000000000000?
sage: c.exactify()
sage: c
1


For the sake of completeness I also include those from @rburing's answer:

sage: c = AA(r) * AA(1/r)
sage: c
1.000000000000000?
1

sage: c = AA(r) * AA(1/r)
sage: c
1.000000000000000?
sage: c.minpoly()
x - 1
sage: c
1

more