rounding error .n() and N()
Why does 1.414 - sqrt(2).n(digits=4) not evaluate to zero?
sage: sqrt(2).n(digits=4)
1.414
sage: 1.414 - sqrt(2).n(digits=4)
-0.0002136
Hi,
This is because the two numbers do not live in the same ground field as you can see
sage: 1.414.parent()
Real Field with 53 bits of precision
sage: sqrt(2).n(digits=4).parent()
Real Field with 17 bits of precision
1.414 is not exactly represented in memory because it is not a diadic number. Two different diadic approximations with different precisions are different.
Vincent
sqrt(2).n(digits=4)
returns a number which agrees with sort(2)
to 4 digits of precision, but it need not be obtained by truncating sqrt(2)
after 4 digits. I'm guessing that it's obtained by truncating sqrt(2)
after the necessary number of binary digits:
sage: a = sqrt(2).n(digits=4)
sage: a.n(digits=30)
1.41421508789062500000000000000
sage: b = sqrt(2).n(16)
sage: b.n(digits=30)
1.41421508789062500000000000000
sage: a == b
True
Asked: 2013-04-08 11:53:32 +0200
Seen: 604 times
Last updated: Apr 08 '13