Skip to content

array_sum() with GMP can loose precision (LLP64) #16890

Closed
@cmb69

Description

@cmb69

Description

The following code:

<?php
var_dump(array_sum([new GMP("9223372036854775806"), 1]));

Resulted in this output:

float(9.223372036854775E+18)

But I expected this output instead:

int(9223372036854775807)

This is caused by an erroneous assumption in gmp_cast_object() for _IS_NUMBER casts (as such it can affect other functions as well), namely that ZEND_LONG would be a signed long, but that is not true for LLP64 data models where it is signed long long. On such platforms, values outside of range [INT_MIN, INT_MAX] are converted to float.

PHP Version

PHP-8.2

Operating System

Windows 64bit

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions