2010-09-18 28 views
10

Duplicar posibles:
Working with large numbers in PHP.extremadamente grandes números enteros en PHP

que corren un completamente inútil aplicación de Facebook. Tengo un problema con el soporte de PHP para enteros. Básicamente, los usuarios se dan números ridículos de puntos. El "rey" actual tiene 102,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,002,557,529,927 puntos.

Parece que PHP no funciona bien con números enteros grandes. Cuando alguien intenta agregar más de una cierta cantidad de puntos, fracasará porque PHP trata esos números como infinitos.

¿Hay alguna biblioteca de matemáticas para trabajar con números ridículamente grandes? ¿Debo tratar los números como cadenas y escribir los míos?

Estamos hablando de números que son 2^20 dígitos en longitud o más. No es necesario que sean precisos (cualquier error se atribuye a la baja calidad de la aplicación en general) ni necesita ser de alto rendimiento. Solo necesito algo que permita números mucho más largos.

(Para aquellos de ustedes que son curiosos, almacenamos nuestros números en la nube, por lo que los costes de almacenamiento no es un gran problema.)

+27

'Ejecuto una aplicación de Facebook completamente inútil'. Usted no dice? ¿Hay algún otro tipo? – aaronasterling

+1

2^20 dígitos de longitud? ¿Estás lidiando con números que tienen más de un millón de dígitos? Es posible que deba comenzar a preocuparse por el costo de almacenamiento. –

+0

"Para aquellos de ustedes que tienen curiosidad, almacenamos nuestros números en la nube, por lo que el costo de almacenamiento no es un gran problema". ;) También estamos hablando de 60 usuarios activos. –

Respuesta

9

PHP utiliza flotadores, o firmados enteros de 32 bits para almacenar números. Claramente, esto no es suficiente. Puede usar aritmética de precisión arbitraria para almacenar estos números grandes. Ver el libro de PHP en BC matemáticas para obtener más información:

http://php.net/manual/en/book.bc.php

5

Dos bibliotecas de PHP para trabajar con grandes números son BC Math y GMP.

+2

GMP me estaba limitando a 10^50 cuando agregué números. Podría almacenar lo que quisiera, pero sería un límite de 10^50 si traté de agregar. Voy a probar BC Math. –

Cuestiones relacionadas