Skip to content

Warn when number base conversion loses precision#22371

Open
Sjord wants to merge 2 commits into
php:masterfrom
Sjord:warn-on-precision-loss
Open

Warn when number base conversion loses precision#22371
Sjord wants to merge 2 commits into
php:masterfrom
Sjord:warn-on-precision-loss

Conversation

@Sjord

@Sjord Sjord commented Jun 20, 2026

Copy link
Copy Markdown

_php_math_basetozval is used for base_convert, bindec, hexdec and octdec. It uses an integer or double for the internal representation of the number. When the input number is too large to fit in there, it loses precision. This commit emits a notice when this happens.

Discussion thread: https://news-web.php.net/php.internals/131364

_php_math_basetozval is used for base_convert, bindec, hexdec and
octdec. It uses an integer or double for the internal representation of
the number. When the input number is too large to fit in there, it loses
precision. This commit emits a notice when this happens.

Discussion thread: https://news-web.php.net/php.internals/131364
The test for overflow used a large integer, larger than PHP_INT_MAX.
Previously it used base_convert to create an integer 4 * PHP_INT_MAX,
but that now raises an overflow warning. We now use PHP_INT_MAX and
append a zero, giving 10 * PHP_INT_MAX.

We can't just use 4 * PHP_INT_MAX, because that is converted to a float
and represented as 3.6893488147419E+19 instead of 36893488147419104082.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant