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
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
Please start posting anonymously - your entry will be published after you log in or create a new account.
Asked: 2013-04-08 11:53:32 +0100
Seen: 521 times
Last updated: Apr 08 '13
HowTo Compute Past Largest Cython Supported Wordsize (efficiently)?
Changing number of decimal digits displayed in output
Numerical approximation of symbolic equation
Set global precision for reals?
unable to numerically solve an equation (basic question)
converting symbolic solve output to numbers [was "numerical value"]