gmp_init

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

gmp_initCrea un número GMP

Descripción

gmp_init(int|string $num, int $base = 0): GMP

Crea un número GMP, a partir de un entero o de un string.

Parámetros

num
Un entero o un string. El string puede ser una representación decimal, hexadecimal, octal o binaria.
base
La base a utilizar para convertir una representación en forma de string. Una base explícita puede estar comprendida entre 2 y 62. Para las bases hasta 36, la casilla es ignorada: las letras mayúsculas y minúsculas tienen el mismo valor. Para las bases de 37 a 62, las letras mayúsculas representan los valores de 10 a 35 y las letras minúsculas representan los valores de 36 a 61. Si base vale 0, entonces la base real es determinada a partir de los caracteres iniciales de num. Si los dos primeros caracteres son 0x o 0X, el string es interpretado como un entero hexadecimal. Si los dos primeros caracteres son 0b o 0B, el string es interpretado como un entero binario. Si los dos primeros caracteres son 0o o 0O, el string es interpretado como un entero octal. Además, si el primer carácter es 0, el string es igualmente interpretado como un entero octal. En todos los demás casos, el string es interpretado como un entero decimal.

Valores devueltos

resource de número de GMP en PHP 5.5 y anterior, o un objeto GMP en PHP 5.6 y posterior.

Historial de cambios

Versión Descripción
8.1.0 El soporte para los prefijos octales explícitos 0o y 0O ha sido añadido para los strings num. La interpretación de estos prefijos cuando base vale 0 ha sido igualmente añadida.

Ejemplos

Ejemplo #1 Creación de un número GMP

<?php
$a
= gmp_init(123456);
$b = gmp_init("0xFFFFDEBACDFEDF7200");
?>

Notas

Nota:

No es necesario llamar a esta función para utilizar enteros o strings en lugar de números GMP en las funciones GMP, como gmp_add(). Los argumentos de estas funciones son automáticamente convertidos en números GMP, si esta conversión es posible y necesaria, utilizando las mismas reglas que gmp_init().

Ver también

add a note

User Contributed Notes 7 notes

up
4
php at richardneill dot org
18 years ago
Here's a way to parse a decimal (eg 3.25) into an integer and exponent:

<?
if (preg_match("/^[0-9]+\.[0-9]+$/",$input)){
//Input is a base-10 decimal. Multiply as necessary to remove the decimal
//point. Convert that to a gmp_resource, then decrement the exponent
//to compensate.

$pieces=explode(".", $input); //Split at the d.p.
$input="$pieces[0]$pieces[1]"; //Remove the decimal point.

$input=ltrim($input,'0');
//Remove any leading zeros, or gmp_init will parse the number as octal.

if ($input==''){ //Deal with "0.0" which would otherwise be ''.
$input=0;
}
$integer=gmp_init($input);
$ns_exponent=-strlen($pieces[1]);
//exponent = (-) the number of characters after the decimal point.
}
?>
up
2
karl dot debisschop at pearson dot com
14 years ago
Unless the base is 16, gpm_init will fail if the string begins with "0b".

> php -r '$v = gmp_init("b83", 17); print("$v\n");'

Resource id #4

> php -r '$v = gmp_init("0b83", 17); print("$v\n");'

[nothing prints]

In may case, where I am explicitly specifying the base, the solution is to apply ltrim first:

> php -r '$v = gmp_init(ltrim("0b83", "0"), 17); print("$v\n");'

Resource id #4
up
2
marcus at synchromedia dot co dot uk
13 years ago
I discovered that the gmp functions use [0-9a-f] up to base 16, but [0-9A-Za-z] (i.e. upper case first) from bases 17 to 62. This differs from most of the base-62 implementations I've found that tend to use lower case first.
up
1
php at richardneill dot org
18 years ago
Note: Leading zeros will make gmp_init parse this as octal.
Thus gmp_init(010) becomes 8.

$a=010; //8
$b="010" + 0; //10
$c=gmp_strval(gmp_init(010)); //8
$d=gmp_strval(gmp_init("010")); //8

This behaviour is inconsistent: either $d should equal $b, or
$b should equal $a.
up
1
Aurelien Marchand
3 years ago
Missing from the documentation: gmp_init() return false in case it failed to parse $num

<?php
var_dump
(gmp_init(""));
// returns "bool(false)" and not a GMP object as hinted by the documentation, it also triggers a Warning "PHP Warning: gmp_init(): Unable to convert variable to GMP - string is not an integer in php shell code on line 1"

?>
up
-1
charlie at oblivion dot cz
18 years ago
gmp_* functions don't accept strings with a leading '+':
<?php
echo gmp_strval(gmp_init('+42')); #0
echo gmp_strval(gmp_add('42', '+42')); #42
echo bcadd('+42', '+42'); #84
?>
up
-3
thomas dot hebinck at digionline dot de
19 years ago
If you call a gmp_* function directly with an interger as parameter, this integer MUST NOT be 0:

for($i=-1;$i<=1;$i++) { echo gmp_strval(gmp_add(2,gmp_mul(1,$i))) . ' '; }

The result is 1 0 3 (wrong)

In this case you have to use gmp_init():

for($i=-1;$i<=1;$i++) { echo gmp_strval(gmp_add(2,gmp_mul(1,gmp_init($i)))) . ' '; }

The result is 1 2 3 (right)

Happy number crunching! :-)
To Top