mirror of
https://github.com/golang/go
synced 2024-11-23 10:50:09 -07:00
math/big: permit upper-case 'P' binary exponent (not just 'p')
The current implementation accepted binary exponents but restricted them to 'p'. This change permits both 'p' and 'P'. R=Go1.13 Updates #29008. Change-Id: I7a89ccb86af4438f17b0422be7cb630ffcf43272 Reviewed-on: https://go-review.googlesource.com/c/159297 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
This commit is contained in:
parent
58365b34bb
commit
7bc2aa670f
@ -224,7 +224,7 @@ func (z *Float) pow5(n uint64) *Float {
|
||||
// sign = "+" | "-" .
|
||||
// prefix = "0" ( "x" | "X" | "b" | "B" ) .
|
||||
// mantissa = digits | digits "." [ digits ] | "." digits .
|
||||
// exponent = ( "E" | "e" | "p" ) [ sign ] digits .
|
||||
// exponent = ( "e" | "E" | "p" | "P" ) [ sign ] digits .
|
||||
// digits = digit { digit } .
|
||||
// digit = "0" ... "9" | "a" ... "z" | "A" ... "Z" .
|
||||
// infinity = [ sign ] ( "inf" | "Inf" ) .
|
||||
@ -238,7 +238,7 @@ func (z *Float) pow5(n uint64) *Float {
|
||||
// The octal prefix "0" is not supported (a leading "0" is simply
|
||||
// considered a "0").
|
||||
//
|
||||
// A "p" exponent indicates a binary (rather then decimal) exponent;
|
||||
// A "p" or "P" exponent indicates a binary (rather then decimal) exponent;
|
||||
// for instance "0x1.fffffffffffffp1023" (using base 0) represents the
|
||||
// maximum float64 value. For hexadecimal mantissae, the exponent must
|
||||
// be binary, if present (an "e" or "E" exponent indicator cannot be
|
||||
|
@ -108,6 +108,7 @@ func TestFloatSetFloat64String(t *testing.T) {
|
||||
{"0b001p-3", 0.125},
|
||||
{"0b.001p3", 1},
|
||||
{"0b0.01p2", 1},
|
||||
{"0b0.01P+2", 1},
|
||||
|
||||
// hexadecimal mantissa and exponent
|
||||
{"0x0", 0},
|
||||
@ -117,6 +118,7 @@ func TestFloatSetFloat64String(t *testing.T) {
|
||||
{"0xff", 255},
|
||||
{"0X.8p1", 1},
|
||||
{"-0X0.00008p16", -0.5},
|
||||
{"-0X0.00008P+16", -0.5},
|
||||
{"0x0.0000000000001p-1022", math.SmallestNonzeroFloat64},
|
||||
{"0x1.fffffffffffffp1023", math.MaxFloat64},
|
||||
} {
|
||||
|
@ -130,10 +130,10 @@ func (z *Rat) SetString(s string) (*Rat, bool) {
|
||||
}
|
||||
|
||||
// scanExponent scans the longest possible prefix of r representing a decimal
|
||||
// ('e', 'E') or binary ('p') exponent, if any. It returns the exponent, the
|
||||
// exponent base (10 or 2), or a read or syntax error, if any.
|
||||
// ('e', 'E') or binary ('p', 'P') exponent, if any. It returns the exponent,
|
||||
// the exponent base (10 or 2), or a read or syntax error, if any.
|
||||
//
|
||||
// exponent = ( "E" | "e" | "p" ) [ sign ] digits .
|
||||
// exponent = ( "e" | "E" | "p" | "P" ) [ sign ] digits .
|
||||
// sign = "+" | "-" .
|
||||
// digits = digit { digit } .
|
||||
// digit = "0" ... "9" .
|
||||
@ -153,7 +153,7 @@ func scanExponent(r io.ByteScanner, binExpOk bool) (exp int64, base int, err err
|
||||
switch ch {
|
||||
case 'e', 'E':
|
||||
// ok
|
||||
case 'p':
|
||||
case 'p', 'P':
|
||||
if binExpOk {
|
||||
base = 2
|
||||
break // ok
|
||||
|
Loading…
Reference in New Issue
Block a user