mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
* util.c (ruby_strtod): should not convert string in the form of
"-I.FE-X" which both "I" and "F" are ommitted. [ruby-dev:23883] * test/ruby/test_float.rb (test_strtod): add test for bug fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b956b4a450
commit
b9bfdbb13e
3 changed files with 40 additions and 9 deletions
19
util.c
19
util.c
|
@ -722,7 +722,8 @@ ruby_strtod(string, endPtr)
|
|||
* fractional part of the mantissa, and X
|
||||
* is the exponent. Either of the signs
|
||||
* may be "+", "-", or omitted. Either I
|
||||
* or F may be omitted, or both. The decimal
|
||||
* or F may be omitted, but both cannot be
|
||||
* ommitted at once. The decimal
|
||||
* point isn't necessary unless F is present.
|
||||
* The "E" may actually be an "e". E and X
|
||||
* may both be omitted (but not just one).
|
||||
|
@ -745,7 +746,8 @@ ruby_strtod(string, endPtr)
|
|||
* case, fracExp is incremented one for each
|
||||
* dropped digit. */
|
||||
int mantSize = 0; /* Number of digits in mantissa. */
|
||||
int decPt = FALSE; /* mantissa has decimal point. */
|
||||
int hasPoint = FALSE; /* Decimal point exists. */
|
||||
int hasDigit = FALSE; /* I or F exists. */
|
||||
const char *pMant; /* Temporarily holds location of mantissa
|
||||
* in string. */
|
||||
const char *pExp; /* Temporarily holds location of exponent
|
||||
|
@ -778,13 +780,13 @@ ruby_strtod(string, endPtr)
|
|||
|
||||
for ( ; c = *p; p += 1) {
|
||||
if (!ISDIGIT(c)) {
|
||||
if (c != '.' || decPt) {
|
||||
if (c != '.' || hasPoint) {
|
||||
break;
|
||||
}
|
||||
decPt = TRUE;
|
||||
hasPoint = TRUE;
|
||||
}
|
||||
else {
|
||||
if (decPt) { /* already in fractional part */
|
||||
if (hasPoint) { /* already in fractional part */
|
||||
fracExp -= 1;
|
||||
}
|
||||
if (mantSize) { /* already in mantissa */
|
||||
|
@ -794,6 +796,7 @@ ruby_strtod(string, endPtr)
|
|||
mantSize += 1;
|
||||
pMant = p;
|
||||
}
|
||||
hasDigit = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -812,7 +815,11 @@ ruby_strtod(string, endPtr)
|
|||
fracExp += (mantSize - 18);
|
||||
mantSize = 18;
|
||||
}
|
||||
{
|
||||
if (!hasDigit) {
|
||||
fraction = 0.0;
|
||||
p = string;
|
||||
}
|
||||
else {
|
||||
int frac1, frac2;
|
||||
frac1 = 0;
|
||||
for ( ; mantSize > 9; mantSize -= 1) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue