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*
I32 ipart = 0; /* index into part[] */
I32 offcount; /* number of digits in least significant part */
- if (PL_numeric_radix_sv)
+#ifdef USE_LOCALE_NUMERIC
+ if (PL_numeric_radix_sv && IN_LOCALE)
point = SvPV(PL_numeric_radix_sv, pointlen);
+#endif
/* sign */
switch (*s) {