La dimensione degli interi in PHP è dipendente dalla piattaforma .
The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). 64-bit platforms usually have a maximum value of about 9E18. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
La dimensione dei float, è anche dipendente dalla piattaforma :
The size of a float is platform-dependent, although a maximum of ~1.8e308 with a precision of roughly 14 decimal digits is a common value (the 64 bit IEEE format).
e nel manuale c'è un grosso avvertimento rosso sulla precisione del galleggiante:
Floating point numbers have limited precision. Although it depends on the system, PHP typically uses the IEEE 754 double precision format, which will give a maximum relative error due to rounding in the order of 1.11e-16. Non elementary arithmetic operations may give larger errors, and, of course, error progragation must be considered when several operations are compounded.
Additionally, rational numbers that are exactly representable as floating point numbers in base 10, like 0.1 or 0.7, do not have an exact representation as floating point numbers in base 2, which is used internally, no matter the size of the mantissa. Hence, they cannot be converted into their internal binary counterparts without a small loss of precision. This can lead to confusing results: for example, floor((0.1+0.7)*10) will usually return 7 instead of the expected 8, since the internal representation will be something like 7.9999999999999991118....
L'estensione Math Math ignora le dipendenze, consentendo di specificare esplicitamente un intero grande come una stringa ed evitare l'interpretazione di PHP di valori letterali interi. Le funzioni GMP sono anche buone alternative e funzionano in modo simile. Possiamo tranquillamente supporre che any size
si riferisca alla dimensione massima delle stringhe, che è limitata solo da disponibile memoria :
It is no problem for a string to become very large. PHP imposes no boundary on the size of a string; the only limit is the available memory of the computer on which PHP is running.
Se ha senso o no, può essere deciso solo in base al singolo caso. Non ho mai notato problemi di prestazioni effettive con le funzioni dell'estensione, ma sicuramente non sono veloci quanto le alternative native.
Is it really necessary?
È necessario solo quando lo è, ma non è sempre ovvio. È possibile identificare facilmente l'abuso palese, ma non può facilmente argomentare su scenari più complessi.
Parla con il tuo collega e scopri perché li usa ovunque . Gli overflow portano a situazioni estremamente brutte, che trovo abbastanza difficili da identificare e risolvere. Se sta abusando di BC Math, potrebbe essere solo perché è rimasto orribilmente bloccato una volta e cerca di giocare nel modo più sicuro possibile. Sebbene non ci sia nulla di intrinsecamente sbagliato nell'usare BC Math, la pena di performance altrimenti insignificante potrebbe essere un problema serio in diversi scenari. Se noti problemi di prestazioni, assicurati di profilare la tua applicazione e assicurati che sia collegato a BC Math.
Ricorda sempre che i tuoi calcoli dovrebbero funzionare correttamente:
- Su ogni sistema a cui sei destinato, macchine per sviluppatori individuali e (ovviamente) macchina di produzione inclusa.
- Indipendentemente dai possibili aggiornamenti di sistema / piattaforma o downgrade.
Nello sviluppo multipiattaforma devi sempre considerare il limite più basso come limite rigido. Se sei assolutamente certo che i tuoi calcoli non vadano oltre i limiti (compresi i loro risultati), allora non ha senso usare BC Math.
Ma se quello che stai descrivendo è che preferisce echo bcadd("1", "2");
oltre echo 1+2;
, beh, buona fortuna!
Ho trovato un & estremamente interessante; post sul blog pertinente nella mia enorme lista di segnalibri, Interi in PHP, in esecuzione con le forbici e la portabilità , sul blog Performance di MySQL di Percona. È vecchio (2007) ma offre una buona panoramica dei vari snafus con portabilità intera in PHP.