GMP arithmetic with normal operator is added by https://wiki.php.net/rfc/operator_overloading_gmp
GMP numbers work like normal PHP number(int/float) with normal PHP arithmetic operators now.
This RFC proposes GMP number compatible with PHP number(int/float).
Current GMP implementation does not support GMP float/rational numbers. For the sake of completeness, GMP float support is needed at least. There are functions to be modified to treat GMP number as normal PHP numbers.
Add GMP float support to GMP module.
* Add all GMP float API wrapper to module.
* GMP float API wrapper supports PHP int/float and GMP int/float. Conversion is done automatically.
* Default precision: 256 (?)
Extracted out to a separate RFC: GMP Floating Point Support
Add math function compatibility.
Some other RFC may implement, full GMP number support in math functions, but this is out of this RFC scope.
Add variable function compatibility.
[yohgaki@dev php-src]$ ./php-bin -a Interactive shell
php > $g = gmp_init(123); php > var_dump($v); object(GMP)#3 (1) { ["num"]=> string(1) "0" } php > $v = $g * 0; php > var_dump($v, empty($v), is_scalar($v)); object(GMP)#4 (1) { ["num"]=> string(3) "0" } bool(false) bool(false)
GMP float is not supported.
php > $f = 2.2; php > $gf = gmp_init($f); Warning: gmp_init(): Unable to convert variable to GMP - wrong type in php shell code on line 1
max()/min()
php > $g = gmp_init(123); php > var_dump($v); object(GMP)#4 (1) { ["num"]=> string(1) "0" } php > $g = gmp_init(5); php > var_dump(max(1,2,$g)); object(GMP)#1 (1) { ["num"]=> string(1) "5" } php > var_dump(min(1,2,$g)); int(1) php > var_dump(min($g, 6, 7)); object(GMP)#1 (1) { ["num"]=> string(1) "5" }
[yohgaki@dev php-src]$ irb 2.0.0p247 :001 > 10 / 3 => 3 2.0.0p247 :002 > 10.0 / 3 => 3.3333333333333335 2.0.0p247 :003 >
[yohgaki@dev php-src]$ php -a Interactive shell php > $g = gmp_init('10'); php > echo $g / 3; 3 php > echo 10 / 3; 3.3333333333333
PHP 5.6 or later
Math functions is better to support GMP float.
Yes/No
I really appreciate if anyone could make patch for this RFC.
After the project is implemented, this section should contain
Keep this updated with features that were discussed on the mail lists.