diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2014-08-12 08:39:40 -0400 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2014-08-13 22:44:06 -0400 |
commit | 61e61fbc49c95894c46dd5128133731fc2092e07 (patch) | |
tree | 000efc7c83f1e235f440163bca5f467b3299558b /pod | |
parent | 40bca5ae9c72f416f0e0e056ecf8e205a03e5be3 (diff) | |
download | perl-61e61fbc49c95894c46dd5128133731fc2092e07.tar.gz |
Hexadecimal float literals, for perl #122219
Do not use system strtod/strtold since its C99 (which we do not require).
If we can fit the mantissa bits of a NV to a UV (which is the case for
the most common format, 64-bit IEEE 754 double, which has 52 mantissa bits)
we will use that, and only in the end convert to NV. If we cannot fit
the bits, accumulate the bits incrementally to a NV.
Diffstat (limited to 'pod')
-rw-r--r-- | pod/perldata.pod | 9 | ||||
-rw-r--r-- | pod/perldiag.pod | 16 |
2 files changed, 25 insertions, 0 deletions
diff --git a/pod/perldata.pod b/pod/perldata.pod index d8edfe94f1..fe39783dd3 100644 --- a/pod/perldata.pod +++ b/pod/perldata.pod @@ -402,6 +402,7 @@ integer formats: 0xdead_beef # more hex 0377 # octal (only numbers, begins with 0) 0b011011 # binary + 0x1.999ap-4 # hexadecimal floating point (the 'p' is required) You are allowed to use underscores (underbars) in numeric literals between digits for legibility (but not multiple underscores in a row: @@ -425,6 +426,14 @@ Hexadecimal, octal, or binary, representations in string literals representation. The hex() and oct() functions make these conversions for you. See L<perlfunc/hex> and L<perlfunc/oct> for more details. +Hexadecimal floating point can start just like a hexadecimal literal, +and it can be followed by an optional fractional hexadecimal part, +but it must be followed by C<p>, an optional sign, and a power of two. +The format is useful for accurately presenting floating point values, +avoiding conversions to or from decimal floating point, and therefore +avoiding possible loss in precision. Notice that while most current +platforms use the 64-bit IEEE 754 floating point, not all do. + You can also embed newlines directly in your strings, i.e., they can end on a different line than they begin. This is nice, but if you forget your trailing quote, the error will not be reported until Perl finds diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 9f1fed97d8..5877065a47 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -2179,6 +2179,22 @@ created on an emergency basis to prevent a core dump. (F) The parser has given up trying to parse the program after 10 errors. Further error messages would likely be uninformative. +=item Hexadecimal float: exponent overflow + +(W overflow) The hexadecimal floating point has larger exponent +than the floating point supports. + +=item Hexadecimal float: exponent underflow + +(W overflow) The hexadecimal floating point has smaller exponent +than the floating point supports. + +=item Hexadecimal float: mantissa overflow + +(W overflow) The hexadecimal floating point literal had more bits in +the mantissa (the part between the 0x and the exponent, also known as +the fraction or the significand) than the floating point supports. + =item Hexadecimal float: precision loss (W overflow) The hexadecimal floating point had internally more |