From: Hugo van der Sanden Date: Tue, 5 Jun 2001 12:58:19 +0000 (+0100) Subject: Re: [ID 20010529.006] String plus zero inconsistent across platforms X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=be484260a45925b3ceeebb752c3a7e6744c86450;p=p5sagit%2Fp5-mst-13.2.git Re: [ID 20010529.006] String plus zero inconsistent across platforms Message-Id: <200106051158.MAA04605@crypt.compulink.co.uk> p4raw-id: //depot/perl@10445 --- diff --git a/util.c b/util.c index f40f5b9..e034c33 100644 --- a/util.c +++ b/util.c @@ -4036,30 +4036,25 @@ Perl_my_atof(pTHX_ const char* s) NV S_mulexp10(NV value, I32 exponent) { - NV result = value; + NV result = 1.0; NV power = 10.0; + bool negative = 0; I32 bit; - if (exponent > 0) { - for (bit = 1; exponent; bit <<= 1) { - if (exponent & bit) { - exponent ^= bit; - result *= power; - } - power *= power; - } - } + if (exponent == 0) + return value; else if (exponent < 0) { + negative = 1; exponent = -exponent; - for (bit = 1; exponent; bit <<= 1) { - if (exponent & bit) { - exponent ^= bit; - result /= power; - } - power *= power; + } + for (bit = 1; exponent; bit <<= 1) { + if (exponent & bit) { + exponent ^= bit; + result *= power; } + power *= power; } - return result; + return negative ? value / result : value * result; } char*