2010-02-15 6 views
1

J'écris une bibliothèque PHP qui a une classe Number qui utilise le bcmath extension pour une précision arbitraire.Quelle précision pour une bibliothèque PHP bcmath?

J'ai deux questions:

  1. Combien est plus lent bcmath par rapport à l'utilisation des types intégrés int et flotter?

  2. bcmath a un scale argument en option (dont la valeur par défaut est 3 chiffres). Dans un but général Classe de nombre que n'importe qui pourrait utiliser, quel serait un bon niveau de précision? Comment les langages comme Perl (qui ont des nombres de précision arbitraires) traitent-ils de l'échelle?

Répondre

1

Je choisirais la gamme de numéros que vous devez prendre en charge. Les valeurs intégrées seront plus rapides que toute valeur qui nécessite un calcul et une conversion vers/depuis un autre format.

Les entiers intégrés sont bons jusqu'à 32 bits sur n'importe quel système, certains systèmes prennent en charge des valeurs de 64 bits. Vous pouvez vérifier ce que votre système supporte en vérifiant la valeur de la constante PHP_INT_MAX et déterminer si vous voulez porter le surcoût de la bibliothèque mathématique après cela. Pour les systèmes avec des entiers de 32 bits, tout élément supérieur à 32 bits sera automatiquement converti en un flottant. Ce n'est pas un problème, sauf si vous utilisez des fonctions intégrées pour des choses comme round, printf, modulus, etc.

J'ai été un peu par cela en utilisant le module pour diviser le trafic arrivant sur mon site ainsi qu'avec les entiers de formatage en utilisant% d dans sprintf: http://af-design.com/blog/2009/10/28/php-64-bit-integer-modulus-almost/

Questions connexes