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

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

Yes, it is exact. To check:

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

more