Je suis un Perl Newbie,
Puis-je simplement utiliser une arithmétique 64 bits dans Perl? P>
Par exemple P>
$operand1 = 0xFFFFFFFFFFFF; # 48 bit value $operand2 = 0xFFFFFFFFFFFF; # 48 bit value $Result = $operand1 * $operand2;
5 Réponses :
Oui, Perl gère automatiquement le grand nombre d'arithmétiques entier pour vous. Cependant, Perl n'offre pas de distinction entre types signés et non signés (il n'y a pas besoin, car il n'y a pas de limites fixes sur la grande gamme entière). P>
the Perlnumber page manuelle contient plus d'informations sur les différents formats numériques pris en charge par Perl. < / p>
Ce n'est pas clair ce que vous entendez par «distinction entre les valeurs signées et non signé»?
Droite, j'aurais dû dire "types" au lieu de "valeurs". Fixé.
Oui, mais vous devez avoir Perl compilé avec un support 64 bits. P>
"Utiliser Bigint" s'assurera que cela fonctionne toujours. (Si vous voulez une vitesse absolue, vous avez choisi le mauvais langage de programmation.)
Perl est souvent utilisé dans la bioinformatique et d'autres champs nécessitant des performances élevées. Si vos numéros sont sûrs de s'adapter à des 64 bits, cette réponse créera un meilleur code performant. Assurez-vous simplement d'utiliser une version récente de Perl et vous voudrez peut-être la compiler vous-même. "Support 64 bits est maintenant considéré comme étant mature" dev.perl .org / perl5 / Actualités / 2002/07/18 / 580Ann
Même avec une prise en charge de 64 bits, vous auriez besoin d'un Utilisez INTEGER; CODE> pour éviter d'obtenir un résultat de point flottant (arrondi) et obtenez plutôt un résultat entier (tronqué de haute bite).
voir Bigint : P>
Support transparent BigInteger pour Perl ... P>
Tous les opérateurs (y compris les opérations de base des mathématiques), à l'exception de l'opérateur de plage
.. code> sont surchargés. Les constantes entier sont créées comme des biguts appropriés. P>
Les constantes de point flottant sont tronquées pour entier. Toutes les pièces et les résultats des expressions sont également tronquées. P>
contrairement à INTEGER , ce pragma crée des constantes entières qui ne sont que limitées de leur taille par la Mémoire disponible et heure de la CPU ... P> blockQuote>
+1 Merci, mais je ne pouvais pas utiliser de fonctions comme hex () etc. ~~~
Alphaneo, en fait, vous pouvez faire $ a = math :: bigint-> nouveau ("0x". $ Your_int) code> et
$ A-> as_hex () code>
Soyez conscient, l'arithmétique 64 bits dans Perl est un, mais ce qu'il est affiché par Sprintf% D% U et% S, est le second. La version Perl actuelle prend en charge 64bits sans problèmes, mais Sprintf% D Format non,% B également. P>
EG. EG.: P> Utiliser Bigint code> permettra à Perl manipuler des entiers de taille arbitraire correctement sans débordement entier.
115792089237316195423570985008687907853269984665640564039457584007913129639936
Voulez-vous vraiment des nombres arithmétiques ou gros 64 bits? Voulez-vous qu'il déborde après 64 bits?