summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/util.c b/util.c
index f40f5b9612..e034c33ce5 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*