El tamaño de los enteros en PHP depende de la plataforma .
El tamaño de un número entero depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (es decir, 32 bits con signo). Las plataformas de 64 bits generalmente tienen un valor máximo de aproximadamente 9E18. PHP no admite enteros sin signo. El tamaño entero se puede determinar usando la constante PHP_INT_SIZE, y el valor máximo usando la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.
El tamaño de los flotadores también depende de la plataforma :
El tamaño de un flotante depende de la plataforma, aunque un máximo de ~ 1.8e308 con una precisión de aproximadamente 14 dígitos decimales es un valor común (el formato IEEE de 64 bits).
y hay una gran advertencia roja en el manual sobre la precisión del flotador:
Los números de coma flotante tienen una precisión limitada. Aunque depende del sistema, PHP generalmente usa el formato de precisión doble IEEE 754, que dará un error relativo máximo debido al redondeo en el orden de 1.11e-16. Las operaciones aritméticas no elementales pueden dar errores más grandes y, por supuesto, la programación de errores debe considerarse cuando se combinan varias operaciones.
Además, los números racionales que son exactamente representables como números de coma flotante en la base 10, como 0.1 o 0.7, no tienen una representación exacta como números de coma flotante en la base 2, que se usa internamente, sin importar el tamaño de la mantisa. Por lo tanto, no se pueden convertir en sus equivalentes binarios internos sin una pequeña pérdida de precisión. Esto puede conducir a resultados confusos: por ejemplo, floor ((0.1 + 0.7) * 10) generalmente devolverá 7 en lugar de los 8 esperados, ya que la representación interna será algo así como 7.9999999999999991118 ...
La extensión BC Math evita las dependencias, lo que le permite especificar explícitamente un entero grande como una cadena, y evitar la interpretación de PHP de literales enteros. Las funciones GMP también son buenas alternativas y funcionan de manera similar. Podemos suponer con seguridad que se any sizerefiere al tamaño máximo de las cadenas, que solo está limitado por la memoria disponible :
No es problema que una cadena se vuelva muy grande. PHP no impone límites en el tamaño de una cadena; El único límite es la memoria disponible de la computadora en la que se ejecuta PHP.
Si tiene sentido o no, solo puede decidirse caso por caso. Nunca he notado ningún problema de rendimiento real con las funciones de la extensión, pero ciertamente no son tan rápidos como las alternativas nativas.
¿Es realmente necesario?
Solo es necesario cuando lo es, pero eso no siempre es obvio. Puede identificar fácilmente el abuso flagrante, pero no puede discutir con tanta facilidad sobre escenarios más complejos.
Discuta con su colega y descubra por qué los usa en todas partes . Los desbordamientos conducen a situaciones extremadamente feas, que encuentro bastante difíciles de identificar y resolver. Si está abusando de BC Math, podría ser solo porque se quedó atascado horriblemente una vez y trata de jugarlo lo más seguro posible. Aunque no hay nada intrínsecamente malo con el uso de BC Math, la penalización de rendimiento de otra manera insignificante puede ser un problema grave en varios escenarios. Si observa algún problema de rendimiento, asegúrese de perfilar su aplicación y asegúrese de que esté relacionado con BC Math.
Recuerde siempre que sus cálculos deberían funcionar correctamente:
- En cada sistema al que se dirige, se incluyen máquinas de desarrollo individuales y (por supuesto) máquinas de producción.
- Independientemente de las posibles actualizaciones o degradaciones del sistema / plataforma.
En el desarrollo multiplataforma, siempre debe considerar el límite más bajo como un límite estricto. Si está absolutamente seguro de que sus cálculos no superarán los límites (incluidos sus resultados), entonces no tiene sentido usar BC Math.
Pero si lo que estás describiendo es que él prefiere echo bcadd("1", "2");más echo 1+2;, bueno, buena suerte!
Encontré una publicación de blog extremadamente interesante y relevante en mi enorme lista de marcadores, Integers in PHP, corriendo con tijeras y portabilidad , en el blog MySQL Performance de Percona. Es antiguo (2007) pero ofrece una buena visión general de varios problemas con portabilidad de enteros en PHP.