11
votes

Comment puis-je faire des arithmétiques 64 bits à Perl?

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;
  • je suis essentiellement à la recherche d'un Remplacement de l'INT64_T dans Perl. LI>
  • Y a-t-il un moyen de mentionner si le La variable est signée ou non signée? LI> ul> p>


1 commentaires

Voulez-vous vraiment des nombres arithmétiques ou gros 64 bits? Voulez-vous qu'il déborde après 64 bits?


5 Réponses :


5
votes

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).

the Perlnumber page manuelle contient plus d'informations sur les différents formats numériques pris en charge par Perl. < / p>


2 commentaires

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é.



14
votes

Oui, mais vous devez avoir Perl compilé avec un support 64 bits.


3 commentaires

"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; pour éviter d'obtenir un résultat de point flottant (arrondi) et obtenez plutôt un résultat entier (tronqué de haute bite).



11
votes

voir Bigint :

Support transparent BigInteger pour Perl ...

Tous les opérateurs (y compris les opérations de base des mathématiques), à l'exception de l'opérateur de plage .. sont surchargés. Les constantes entier sont créées comme des biguts appropriés.

Les constantes de point flottant sont tronquées pour entier. Toutes les pièces et les résultats des expressions sont également tronquées.

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 ...


2 commentaires

+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) et $ A-> as_hex ()



0
votes

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.


0 commentaires

0
votes

Utiliser Bigint code> permettra à Perl manipuler des entiers de taille arbitraire correctement sans débordement entier.

EG. EG.: P>

115792089237316195423570985008687907853269984665640564039457584007913129639936


0 commentaires