mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Add note about problems with math.fsum on x86 hardware.
This commit is contained in:
parent
67ebfefef5
commit
23957cb8fb
1 changed files with 26 additions and 0 deletions
|
@ -90,6 +90,32 @@ Number-theoretic and representation functions:
|
||||||
algorithm's accuracy depends on IEEE-754 arithmetic guarantees and the
|
algorithm's accuracy depends on IEEE-754 arithmetic guarantees and the
|
||||||
typical case where the rounding mode is half-even.
|
typical case where the rounding mode is half-even.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
On platforms where arithmetic results are not correctly rounded,
|
||||||
|
:func:`fsum` may occasionally produce incorrect results; these
|
||||||
|
results should be no less accurate than those from the builtin
|
||||||
|
:func:`sum` function, but nevertheless may have arbitrarily
|
||||||
|
large relative error.
|
||||||
|
|
||||||
|
In particular, this affects some older Intel hardware (for
|
||||||
|
example Pentium and earlier x86 processors) that makes use of
|
||||||
|
'extended precision' floating-point registers with 64 bits of
|
||||||
|
precision instead of the 53 bits of precision provided by a C
|
||||||
|
double. Arithmetic operations using these registers may be
|
||||||
|
doubly rounded (rounded first to 64 bits, and then rerounded to
|
||||||
|
53 bits), leading to incorrectly rounded results. To test
|
||||||
|
whether your machine is one of those affected, try the following
|
||||||
|
at a Python prompt::
|
||||||
|
|
||||||
|
>>> 1e16 + 2.9999
|
||||||
|
10000000000000002.0
|
||||||
|
|
||||||
|
Machines subject to the double-rounding problem described above
|
||||||
|
are likely to print ``10000000000000004.0`` instead of
|
||||||
|
``10000000000000002.0``.
|
||||||
|
|
||||||
|
|
||||||
.. versionadded:: 2.6
|
.. versionadded:: 2.6
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue