O tamanho dos números inteiros no PHP depende da plataforma .
O tamanho de um número inteiro depende da plataforma, embora um valor máximo de cerca de dois bilhões seja o valor usual (com 32 bits assinados). As plataformas de 64 bits geralmente têm um valor máximo de cerca de 9E18. O PHP não suporta números inteiros não assinados. O tamanho inteiro pode ser determinado usando a constante PHP_INT_SIZE e o valor máximo usando a constante PHP_INT_MAX desde o PHP 4.4.0 e o PHP 5.0.5.
O tamanho dos carros alegóricos também depende da plataforma :
O tamanho de um flutuador depende da plataforma, embora um máximo de ~ 1.8e308 com uma precisão de aproximadamente 14 dígitos decimais seja um valor comum (o formato IEEE de 64 bits).
e há um grande aviso vermelho no manual sobre precisão de flutuação:
Os números de ponto flutuante têm precisão limitada. Embora dependa do sistema, o PHP normalmente usa o formato de precisão dupla IEEE 754, que fornecerá um erro relativo máximo devido ao arredondamento na ordem de 1.11e-16. Operações aritméticas não elementares podem gerar erros maiores e, é claro, a progragação de erros deve ser considerada quando várias operações são compostas.
Além disso, números racionais que são exatamente representáveis como números de ponto flutuante na base 10, como 0,1 ou 0,7, não têm uma representação exata como números de ponto flutuante na base 2, que é usada internamente, independentemente do tamanho da mantissa. Portanto, eles não podem ser convertidos em seus equivalentes binários internos sem uma pequena perda de precisão. Isso pode levar a resultados confusos: por exemplo, floor ((0.1 + 0.7) * 10) geralmente retornará 7 em vez do esperado 8, já que a representação interna será algo como 7.9999999999999991118 ....
A extensão BC Math ignora as dependências, permitindo que você especifique explicitamente um número inteiro grande como uma string e evite a interpretação do PHP de literais inteiros. As funções GMP também são boas alternativas e funcionam de maneira semelhante. Podemos assumir com segurança que any size
se refere ao tamanho máximo de strings, limitado apenas pela memória disponível :
Não há problema em que uma cadeia se torne muito grande. O PHP não impõe limites no tamanho de uma string; o único limite é a memória disponível do computador em que o PHP está sendo executado.
Se faz sentido ou não, só pode ser decidido caso a caso. Nunca notei nenhum problema real de desempenho com as funções da extensão, mas certamente elas não são tão rápidas quanto as alternativas nativas.
Isso é realmente necessário?
Só é necessário quando é, mas nem sempre é óbvio. Você pode identificar facilmente abusos flagrantes, mas não pode argumentar com facilidade em cenários mais complexos.
Discuta com seu colega e descubra por que ele os usa em todos os lugares . Os transbordamentos levam a situações extremamente feias, que acho bastante difíceis de identificar e resolver. Se ele está abusando do BC Math, pode ser porque ele ficou terrivelmente preso uma vez e tenta jogar o mais seguro possível. Embora não exista nada de inerentemente errado no uso do BC Math, a penalidade de desempenho insignificante pode ser um problema sério em vários cenários. Se você notar algum problema de desempenho, verifique o perfil de seu aplicativo e verifique se isso está relacionado ao BC Math.
Lembre-se sempre de que seus cálculos devem funcionar corretamente:
- Em todos os sistemas que você está alvejando, incluem máquinas de desenvolvimento individuais e (é claro) máquinas de produção.
- Independentemente de possíveis atualizações ou downgrades do sistema / plataforma.
No desenvolvimento de várias plataformas, você deve sempre considerar o limite mais baixo como um limite rígido. Se você está absolutamente certo de que seus cálculos não ultrapassarão os limites (incluindo os resultados), não faz sentido usar o BC Math.
Mas se o que você está descrevendo é que ele prefere echo bcadd("1", "2");
mais echo 1+2;
, bem, boa sorte!
Encontrei um post extremamente interessante e relevante em minha enorme lista de favoritos, Inteiros em PHP, com tesoura e portabilidade , no blog MySQL Performance da Percona. É antigo (2007), mas fornece uma boa visão geral de vários snafus com portabilidade inteira em PHP.