>PHP: Funciones GMP - Manual

MANUAL DE PHP

(y algo mas)windsurf pozo izquierdo
Google
search for in the  
ELMARRAJO.COM mysql bulma desarrollo web linux fedora html ayuda

windsurf mercedes camper

XLVI. Funciones GMP

Introducción

Estas funciones permiten trabajar con números enteros de cualquier longitud arbitraria empleando la librerí GNUMP.

Estas funciones se añadieron en la versión de PHP 4.0.4.

Nota: La mayoría de funciones GMP aceptan como argumentos números GMP, definidos como resource más adelante. Sin embargo, la mayoría de estas funciones también aceptan argumentos de tipo numérico o cadenas de texto, ya que se pueden convertir fácilmente. Además, si existe una función más rápida que pueda operar con enteros, se empleará esa función en lugar de la otra función más lenta. Este proceso se realiza de forma automática y transparente, por lo que a modo de resumen se puede decir que se pueden emplear números de tipo entero en todas aquellas funciones cuyos parámetros se han definido como números GMP. Vea también la documentación de la función gmp_init().

Aviso

Si se quiere indicar de forma explícita un número entero muy grande, se recomienda hacerlo en forma de cadena. De otra forma, PHP lo interpreta como un entero y podría producirse una pérdida de precisión antes de comenzar a utilizar las funciones GMP.

Nota: Esta extensión está disponible en sistemas Windows desde la versión de PHP 5.1.0.

Requisitos

La librería GMP de puede descargar desde la dirección http://www.swox.com/gmp/. Además, en ese sitio web también está disponible el manual de GMP.

Para poder utilizar estas funciones se requiere al menos la versión 2 de GMP. Algunas funciones pueden requerir además alguna versión más reciente.

Instalación

Para poder utilizar estas funciones, se debe compilar PHP con soporte de GMP mediante la opción --with-gmp.

Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración en php.ini.

Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.

GMP_ROUND_ZERO (integer)

GMP_ROUND_PLUSINF (integer)

GMP_ROUND_MINUSINF (integer)

Ejemplos

Ejemplo 1. Cálculo del factorial usando GMP

<?php
function fact($x)
{
  
$factorial = 1;
   for (
$i=2; $i < $x; $i++) {
      
$factorial = gmp_mul($factorial, $i);
   }
   return
$factorial;
}

echo
gmp_strval(fact(1000)) . "\n";
?>

En el ejemplo se calcula el factorial de número 1000 (un número bastante grande para calcular su factorial) de forma bastante rápida.

Ver también

Se pueden encontrar muchas otras funciones matemáticas en las secciones Funciones matemáticas de precisión arbitraria BCMath y Funciones Matemáticas.

Tabla de contenidos
gmp_abs -- Valor absoluto
gmp_add -- Suma números
gmp_and -- Realiza una operación de AND lógico
gmp_clrbit -- Borra un bit
gmp_cmp -- Compara números
gmp_com -- Calcula el complementario
gmp_div_q -- Divide números
gmp_div_qr -- Divide números y obtiene el cociente y el resto
gmp_div_r -- Resto de la división de números
gmp_div -- Alias of gmp_div_q()
gmp_divexact -- División exacta de números
gmp_fact -- Factorial
gmp_gcd -- Calcula el MCD (máximo común divisor)
gmp_gcdext -- Calcula el MCD y los coeficientes
gmp_hamdist -- Distancia de Hamming
gmp_init -- Crea un número GMP
gmp_intval -- Convierte números GMP a números enteros
gmp_invert -- Invierte según el módulo
gmp_jacobi -- Calcula el símbolo de Jacobi
gmp_legendre -- Calcula el símbolo de Legendre
gmp_mod -- Operación Módulo
gmp_mul -- Multiplica números
gmp_neg -- Cambia el signo de un número
gmp_or -- Realiza una operación de OR lógico
gmp_perfect_square -- Comprueba si es un cuadrado perfecto
gmp_popcount -- Calcula la población de un número
gmp_pow -- Eleva un número a una potencia
gmp_powm -- Eleva un número a una potencia según el módulo
gmp_prob_prime -- Comprueba si un número tiene probabilidades de ser un número primo
gmp_random -- Genera un número aleatorio
gmp_scan0 -- Busca un 0
gmp_scan1 -- Busca un 1
gmp_setbit -- Establece el valor de un bit
gmp_sign -- Obtiene el signo del número
gmp_sqrt -- Calcula la raíz cuadrada
gmp_sqrtrem --  Calcula la raíz cuadrada con el resto
gmp_strval -- Convierte un número GMP a una cadena de texto
gmp_sub -- Resta números
gmp_xor -- Realiza una operación de XOR lógico


add a note add a note User Contributed Notes
Funciones GMP
john at worldmapad dot com
22-Jul-2006 11:24
Here's a quick and dirty way to use simple GMP functions with PHP without recompiling. It is dependent upon the use of the exec() function, so make sure you can use exec(). While in safe mode you must consider the safe_mode_exec_dir directive. And don't simply pass user input to the exec function without validating the input first!

Download and Install GMP as instructed in README and INSTALL files.
On my MAC OS X Server, I just did the following:
./configure
make
make check
make install
This installed it in the /usr/local directory. There were some errors, but not with any functions I needed.
Within the gmp-4.#.# cd into the demos directory. Then compile pexpr.c by typing:
make pexpr
This is a simple expressions parser which serves as a simple interface to some of the basic GMP functions.
You can test it then like:
./pexpr "102394874783 * 23498748";
Now you may interface with it using PHP's exec() function.
richard-slater.co.uk
22-Feb-2004 01:03
For those (like me) who are trying to do bit masking with very large numbers, here is a useful function to do the work for you.

<?php
 
function isBitSet($bitMask, $bitMap)
  {
   return (bool)
gmp_intval(gmp_div(gmp_and($bitMask, $bitMap),$bitMask));
  }
?>
helvecio_oliveira at yahoo dot com dot br
15-Oct-2003 01:51
=============================================================
A set of very nice functions to handle IP Address with gmplib:

The best way to store a range into a database is store:
dNet ..... decimal representation of a Net
dMask .... decimal representation of a Mask

All another parameters can be calculated.

<?
/*
f_ip2dec($a) ................... IP string to decimal
f_dec2ip($a) ................... decimal to IP string

f_dec2ipall($dNet,$dMask) ...... decimal Net and Mask to an Array with several IP parameters

f_dec2cidr($a) ................. decimal Mask to CIDR

f_and($a,$b) ................... and
f_or($a,$b) .................... or
f_xor($a,$b) ................... xor
f_not($a) ...................... not
f_dec2bin($a) .................. decimal to binary string
f_bin2dec($a) .................. binary string to decimal
*/

function f_and($a,$b){
$a=gmp_init(strval($a));
$b=gmp_init(strval($b));
$d=gmp_and($a,$b);
return
floatval(gmp_strval($d));
}

function
f_or($a,$b){
$a=gmp_init(strval($a));
$b=gmp_init(strval($b));
$d=gmp_or($a,$b);
return
floatval(gmp_strval($d));
}

function
f_xor($a,$b){
$a=gmp_init(strval($a));
$b=gmp_init(strval($b));
$d=gmp_xor($a,$b);
return
floatval(gmp_strval($d));
}

function
f_not($a){
$a=gmp_init(strval($a));
$d=gmp_strval($a,2);
$d=str_replace("1","x",$d);
$d=str_replace("0","1",$d);
$d=str_replace("x","0",$d);
$d=gmp_init($d,2);
return
floatval(gmp_strval($d,10));
}

function
f_dec2bin($a){
$a=gmp_init(strval($a));
return
gmp_strval($a,2);
}

function
f_bin2dec($a){
$a=gmp_init(strval($a),2);
return
floatval(gmp_strval($a,10));
}

function
f_ip2dec($a){
$d = 0.0;
$b = explode(".", $a,4);
for (
$i = 0; $i < 4; $i++) {
      
$d *= 256.0;
      
$d += $b[$i];
   };
return
$d;
}

function
f_dec2ip($a){
  
$b=array(0,0,0,0);
  
$c = 16777216.0;
  
$a += 0.0;
   for (
$i = 0; $i < 4; $i++) {
      
$k = (int) ($a / $c);
      
$a -= $c * $k;
      
$b[$i]= $k;
      
$c /=256.0;
   };
  
$d=join('.', $b);
   return(
$d);
}

function
f_dec2cidr($a){
$a=gmp_init(strval($a));
$d=strlen(str_replace("0","",gmp_strval($a,2)));
return
$d;
}

function
f_dec2ipall($dNet,$dMask){
 
$dWildCard=f_not($dMask);
 
$IpAll["Net"]=f_dec2ip($dNet);
 
$IpAll["Mask"]=f_dec2ip($dMask);
 
$IpAll["WildCard"]=f_dec2ip($dWildCard);
 
$IpAll["Cidr"]=f_dec2cidr($dMask);
 
$IpAll["Bcast"]=f_dec2ip(f_or($dNet,$dWildCard));
 
$IpAll["nIp"]=$dWildCard+1;
 
$IpAll["nIpUtil"]=$dWildCard-1;
  if(
$IpAll["nIp"] > 2){
      
$IpAll["IpFrom"]=f_dec2ip($dNet+1);
      
$IpAll["IpTo"]=f_dec2ip($dNet+$dWildCard-1);
  }
  else
  {
      
$IpAll["IpFrom"]="-";
      
$IpAll["IpTo"]="-";
      
$IpAll["nIpUtil"]=0;
  }
  return
$IpAll;
}

?>

=============================================================
GMP install steps in Mandrake 9.1:
----------------------------------------------------------
cp -r /usr/src/php-devel/extensions/gmp /tmp/gmp
cd /tmp/gmp
phpize
./configure
make install
echo "extension = gmp.so" > /etc/php/90_gmp.ini

Restart apache web server.
----------------------------------------------------------
gmp.so is in:
/usr/lib/php/extensions/

look in phpinfo, the string:
/etc/php/90_gmp.ini

Needs these tools:
autoconf
automake
libtool
m4
php430-devel-430-11mdk.rpm
all rpm´s that are envolved to run and compile gmp (*gmp*.rpm)

Some docs about self contained extensions:
/usr/share/doc/php430-devel-430/SELF-CONTAINED-EXTENSIONS
=============================================================

Citas célebres

El hombre que es poeta a los veinte años no es poeta: es hombre. Si es poeta después de los veinte años, entonces es poeta.

Charles Péguy
Escritor francés
(1873-1914)
Citas en tu mail
©Contenidos Gratis

Ilusiones Opticas
ilusion_optica_028.jpg
Contenidos Web

Chiste de... Mamá, mamá
Le llaman mono

- Mamá, mamá, ¡en el colegio me llaman mono!

- No les hagas ni caso y péinate la cara.
Chistes en tu mail
©ContenidosGratis

Humor Gráfico
humor_grafico_024.jpg
Contenidos Web

Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos
Cake ManiaCake Mania
Jugadores: 6835
Categoría del juego: Acción
Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero.
Rainbow WebRainbow Web
Jugadores: 2199
Categoría del juego: Puzzles
Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente.
Mahjongg FortunaMahjongg Fortuna
Jugadores: 12462
Categoría del juego: Solitarios
Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta.
Chainz 2Chainz 2
Jugadores: 6955
Categoría del juego: Puzzles
Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más.
DeliciousDelicious
Jugadores: 4405
Categoría del juego: Acción
Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues!
BookwormBookworm
Jugadores: 4568
Categoría del juego: Palabras
Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos!
ZumaZuma
Jugadores: 4976
Categoría del juego: Acción
Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás!
Jewel of AtlantisJewel of Atlantis
Jugadores: 3798
Categoría del juego: Puzzles
Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis.
Jewel QuestJewel Quest
Jugadores: 3727
Categoría del juego: Puzzles
Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos!
Bejeweled 2Bejeweled 2
Jugadores: 3659
Categoría del juego: Puzzles
Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca.
Contenidos gratis en tu webSiguiente >>

Fotos divertidas
fotos_increibles_0391.jpg
Contenidos Web
microrobots avion deportes riesgo recetas cocina canaria juegos online gratis moto motociclismo horoscopos naranjas valencianas surf canarias montañismo ciudades turismo postales gratis library Horoscopos Diarios Windsurf Canarias
fregadero microondas placa electrica bañopreparar camper pantalla plananevera compresor electricacamper fiat ducato camper baño quimicomampara enrollable bañocamper aire climatizadofurgoneta surf windsurffurgoneta surf windsurftelevisor furgonetas camperfurgonetas camper cama

Sudoku del día
Nivel de dificultad: Fácil



Cómo jugar:
El juego consiste en colocar los números del 1 al nueve de tal forma que no se repita el mismo número en la columna, fila y caja (bloques 3x3 enmarcados).

©Contenidos Gratis | Sudoku en tu mail
Sucedió el...

30 de agosto de 1617

Fallece Santa Rosa de Lima, por la que se celebra el "Día de la Patrona de América".
Efemérides en tu mail
©Contenidos Gratis
windsurf canarias youtube porno canarias baleares valencia madrid