Kaydet (Commit) 2547ce7f authored tarafından Mark Dickinson's avatar Mark Dickinson

Clarify sys.float_info documentation.

üst 601ec58f
...@@ -296,43 +296,65 @@ always available. ...@@ -296,43 +296,65 @@ always available.
.. data:: float_info .. data:: float_info
A structseq holding information about the float type. It contains low level A structseq holding information about the float type. It contains low level
information about the precision and internal representation. Please study information about the precision and internal representation. The values
your system's :file:`float.h` for more information. correspond to the various floating-point constants defined in the standard
header file :file:`float.h` for the 'C' programming language; see section
+---------------------+--------------------------------------------------+ 5.2.4.2.2 of the 1999 ISO/IEC C standard [C99]_, 'Characteristics of
| attribute | explanation | floating types', for details.
+=====================+==================================================+
| :const:`epsilon` | Difference between 1 and the next representable | +---------------------+----------------+--------------------------------------------------+
| | floating point number | | attribute | float.h macro | explanation |
+---------------------+--------------------------------------------------+ +=====================+================+==================================================+
| :const:`dig` | digits (see :file:`float.h`) | | :const:`epsilon` | DBL_MAX | difference between 1 and the least value greater |
+---------------------+--------------------------------------------------+ | | | than 1 that is representable as a float |
| :const:`mant_dig` | mantissa digits (see :file:`float.h`) | +---------------------+----------------+--------------------------------------------------+
+---------------------+--------------------------------------------------+ | :const:`dig` | DBL_DIG | maximum number of decimal digits that can be |
| :const:`max` | maximum representable finite float | | | | faithfully represented in a float; see below |
+---------------------+--------------------------------------------------+ +---------------------+----------------+--------------------------------------------------+
| :const:`max_exp` | maximum int e such that radix**(e-1) is in the | | :const:`mant_dig` | DBL_MANT_DIG | float precision: the number of base-``radix`` |
| | range of finite representable floats | | | | digits in the significand of a float |
+---------------------+--------------------------------------------------+ +---------------------+----------------+--------------------------------------------------+
| :const:`max_10_exp` | maximum int e such that 10**e is in the | | :const:`max` | DBL_MAX | maximum representable finite float |
| | range of finite representable floats | +---------------------+----------------+--------------------------------------------------+
+---------------------+--------------------------------------------------+ | :const:`max_exp` | DBL_MAX_EXP | maximum integer e such that ``radix**(e-1)`` is |
| :const:`min` | Minimum positive normalizer float | | | | a representable finite float |
+---------------------+--------------------------------------------------+ +---------------------+----------------+--------------------------------------------------+
| :const:`min_exp` | minimum int e such that radix**(e-1) is a | | :const:`max_10_exp` | DBL_MAX_10_EXP | maximum integer e such that ``10**e`` is in the |
| | normalized float | | | | range of representable finite floats |
+---------------------+--------------------------------------------------+ +---------------------+----------------+--------------------------------------------------+
| :const:`min_10_exp` | minimum int e such that 10**e is a normalized | | :const:`min` | DBL_MIN | minimum positive normalized float |
| | float | +---------------------+----------------+--------------------------------------------------+
+---------------------+--------------------------------------------------+ | :const:`min_exp` | DBL_MIN_EXP | minimum integer e such that ``radix**(e-1)`` is |
| :const:`radix` | radix of exponent | | | | a normalized float |
+---------------------+--------------------------------------------------+ +---------------------+----------------+--------------------------------------------------+
| :const:`rounds` | addition rounds (see :file:`float.h`) | | :const:`min_10_exp` | DBL_MIN_10_EXP | minimum integer e such that ``10**e`` is a |
+---------------------+--------------------------------------------------+ | | | normalized float |
+---------------------+----------------+--------------------------------------------------+
| :const:`radix` | FLT_RADIX | radix of exponent representation |
+---------------------+----------------+--------------------------------------------------+
| :const:`rounds` | FLT_ROUNDS | constant representing rounding mode |
| | | used for arithmetic operations |
+---------------------+----------------+--------------------------------------------------+
The attribute :attr:`sys.float_info.dig` needs further explanation. If
``s`` is any string representing a decimal number with at most
:attr:`sys.float_info.dig` significant digits, then converting ``s`` to a
float and back again will recover a string representing the same decimal
value::
.. note:: >>> import sys
>>> sys.float_info.dig
15
>>> s = '3.14159265358979' # decimal string with 15 significant digits
>>> format(float(s), '.15g') # convert to float and back -> same value
'3.14159265358979'
But for strings with more than :attr:`sys.float_info.dig` significant digits,
this isn't always true::
The information in the table is simplified. >>> s = '9876543211234567' # 16 significant digits is too many!
>>> format(float(s), '.16g') # conversion changes value
'9876543211234568'
.. versionadded:: 2.6 .. versionadded:: 2.6
...@@ -992,3 +1014,8 @@ always available. ...@@ -992,3 +1014,8 @@ always available.
first three characters of :const:`version`. It is provided in the :mod:`sys` first three characters of :const:`version`. It is provided in the :mod:`sys`
module for informational purposes; modifying this value has no effect on the module for informational purposes; modifying this value has no effect on the
registry keys used by Python. Availability: Windows. registry keys used by Python. Availability: Windows.
.. rubric:: Citations
.. [C99] ISO/IEC 9899:1999. "Programming languages -- C." A public draft of this standard is available at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf .
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment