gmp_init

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

gmp_initCrea un numero GMP

Descrizione

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

Crea un numero GMP partendo da un intero o da una stringa.

Elenco dei parametri

num
Un intero o una stringa. La rappresentazione della stringa può essere decimale, esadecimale, ottale o binaria.
base
La base da usare per convertire una rappresentazione string. Una base esplicita può essere compresa tra 2 e 62. Per le basi fino a 36, la differenza tra maiuscole e minuscole viene ignorata; lettere maiuscole e minuscole hanno lo stesso valore. Per le basi da 37 a 62, le lettere maiuscole rappresentano i valori da 10 a 35 e le lettere minuscole rappresentano i valori da 36 a 61. Se base è 0, la base effettiva viene determinata dai caratteri iniziali di num. Se i primi due caratteri sono 0x o 0X, la stringa viene interpretata come un intero esadecimale. Se i primi due caratteri sono 0b o 0B, la stringa viene interpretata come un intero binario. Se i primi due caratteri sono 0o o 0o, la stringa viene interpretata come un intero ottale. Inoltre, se il primo carattere è 0, la stringa viene interpretata anche come un intero ottale. In tutti gli altri casi, la stringa viene interpretata come un intero decimale.

Valori restituiti

Una resource numero GMP.

Log delle modifiche

Versione Descrizione
8.1.0 È stato aggiunto il supporto per i prefissi ottali espliciti 0o e 0o per le stringhe num. È stato anche aggiunto il supporto per l'interpretazione di tali prefissi quando base è 0.

Esempi

Example #1 Creazione di un numero GMP

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

Note

Nota:

Non è necessario chiamare questa funzione per usare interi o stringhe al posto dei numeri GMP nelle funzioni GMP (come con gmp_add()). Gli argomenti della funzione vengono automaticamente convertiti in numeri GMP, se tale conversione è possibile e necessaria, usando le stesse regole di gmp_init().

Vedere anche:

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
13 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
2 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