Skip to content

Commit 397c83a

Browse files
committed
Optimize evaluating JSON number.
1 parent f6e047e commit 397c83a

File tree

1 file changed

+12
-17
lines changed

1 file changed

+12
-17
lines changed

json_parser.c

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -362,23 +362,18 @@ static double __evaluate_json_number(const char *integer,
362362
}
363363
}
364364

365-
num = mant;
366-
if (exp != 0 && figures != 0)
367-
{
368-
if (exp > 309 - figures)
369-
num = INFINITY;
370-
else if (exp > 0)
371-
num *= __power_of_10[exp];
372-
else if (exp > -309)
373-
num /= __power_of_10[-exp];
374-
else if (exp > -324 - figures)
375-
{
376-
num /= __power_of_10[-exp - 308];
377-
num /= __power_of_10[308];
378-
}
379-
else
380-
num = 0.0;
381-
}
365+
if (exp == 0 || figures == 0)
366+
num = mant;
367+
else if (exp > 291)
368+
num = INFINITY;
369+
else if (exp > 0)
370+
num = mant * __power_of_10[exp];
371+
else if (exp > -309)
372+
num = mant / __power_of_10[-exp];
373+
else if (exp > -324 - figures)
374+
num = mant / __power_of_10[-exp - 308] / __power_of_10[308];
375+
else
376+
num = 0.0;
382377

383378
return sign ? -num : num;
384379
}

0 commit comments

Comments
 (0)