mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* util.c (ruby_strtod): 0.0000000000000000001 == 0.0 should be false.
[ruby-talk:99318] [ruby-dev:23465] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
175f3b2d7a
commit
c4216a26e2
2 changed files with 26 additions and 27 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Fri May 7 11:17:27 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
||||||
|
|
||||||
|
* util.c (ruby_strtod): 0.0000000000000000001 == 0.0 should be false.
|
||||||
|
[ruby-talk:99318] [ruby-dev:23465]
|
||||||
|
|
||||||
Thu May 6 22:27:32 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
Thu May 6 22:27:32 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
||||||
|
|
||||||
* ext/socket/socket.c (ippaddr): use NUMERICHOST if can not resolve
|
* ext/socket/socket.c (ippaddr): use NUMERICHOST if can not resolve
|
||||||
|
|
48
util.c
48
util.c
|
@ -744,9 +744,10 @@ ruby_strtod(string, endPtr)
|
||||||
* unnecessary overflow on I alone). In this
|
* unnecessary overflow on I alone). In this
|
||||||
* case, fracExp is incremented one for each
|
* case, fracExp is incremented one for each
|
||||||
* dropped digit. */
|
* dropped digit. */
|
||||||
int mantSize; /* Number of digits in mantissa. */
|
int mantSize = 0; /* Number of digits in mantissa. */
|
||||||
int decPt; /* Number of mantissa digits BEFORE decimal
|
int decPt = FALSE; /* mantissa has decimal point. */
|
||||||
* point. */
|
const char *pMant; /* Temporarily holds location of mantissa
|
||||||
|
* in string. */
|
||||||
const char *pExp; /* Temporarily holds location of exponent
|
const char *pExp; /* Temporarily holds location of exponent
|
||||||
* in string. */
|
* in string. */
|
||||||
|
|
||||||
|
@ -770,28 +771,30 @@ ruby_strtod(string, endPtr)
|
||||||
sign = FALSE;
|
sign = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* skip preceding zeros */
|
|
||||||
if (*p == '0') {
|
|
||||||
while (*p == '0')
|
|
||||||
p++;
|
|
||||||
p--;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Count the number of digits in the mantissa (including the decimal
|
* Count the number of digits in the mantissa (including the decimal
|
||||||
* point), and also locate the decimal point.
|
* point), and also locate the decimal point.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
decPt = -1;
|
for ( ; c = *p; p += 1) {
|
||||||
for (mantSize = 0; ; mantSize += 1) {
|
|
||||||
c = *p;
|
|
||||||
if (!ISDIGIT(c)) {
|
if (!ISDIGIT(c)) {
|
||||||
if ((c != '.') || (decPt >= 0)) {
|
if (c != '.' || decPt) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
decPt = mantSize;
|
decPt = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (decPt) { /* already in fractional part */
|
||||||
|
fracExp -= 1;
|
||||||
|
}
|
||||||
|
if (mantSize) { /* already in mantissa */
|
||||||
|
mantSize += 1;
|
||||||
|
}
|
||||||
|
else if (c != '0') { /* have entered mantissa */
|
||||||
|
mantSize += 1;
|
||||||
|
pMant = p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
p += 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -802,20 +805,11 @@ ruby_strtod(string, endPtr)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pExp = p;
|
pExp = p;
|
||||||
p -= mantSize;
|
p = pMant; /* valid if mantSize > 0 */
|
||||||
if (decPt < 0) {
|
|
||||||
decPt = mantSize;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mantSize -= 1; /* One of the digits was the point. */
|
|
||||||
}
|
|
||||||
if (mantSize > 18) {
|
if (mantSize > 18) {
|
||||||
fracExp = decPt - 18;
|
fracExp += (mantSize - 18);
|
||||||
mantSize = 18;
|
mantSize = 18;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
fracExp = decPt - mantSize;
|
|
||||||
}
|
|
||||||
if (mantSize == 0) {
|
if (mantSize == 0) {
|
||||||
fraction = 0.0;
|
fraction = 0.0;
|
||||||
p = string;
|
p = string;
|
||||||
|
|
Loading…
Reference in a new issue