gmp_init

(PHP 4 >= 4.0.4, PHP 5)

gmp_init -- Create GMP number

Description

resource gmp_init ( mixed number [, int base] )

Creates a GMP number from an integer or string. String representation can be decimal or hexadecimal. In the latter case, the string should start with 0x. Optional parameter base is available since PHP 4.1.0.

例子 1. Creating GMP number

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

注: It is not necessary to call this function if you want to use integer or string in place of GMP number in GMP functions, like gmp_add(). Function arguments are automatically converted to GMP numbers, if such conversion is possible and needed, using the same rules as gmp_init().


add a note add a note User Contributed Notes
php at richardneill dot org
20-Sep-2006 06:30
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.
}
?>
php at richardneill dot org
20-Sep-2006 06:14
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.
thomas dot hebinck at digionline dot de
19-Aug-2005 01:23
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! :-)