Dans l'un de mes modules, je dois traiter du concept de l'infini. À ce jour, j'ai utilisé 9**9**9
comme infini positif, et cela semble bien fonctionner, est rapide, et semble être ce que les internes de Perl utilisent comme infini.Quelle est la meilleure façon de vérifier l'infini dans un module Perl?
Cependant, les choses deviennent un peu casse-gueule si un utilisateur de mon module décide d'utiliser l'un des grands modules numériques (comme use bigint;
), puis ils utilisent inf
ou Math::BigInt->binf()
pour représenter l'infini.
Dans certains endroits, cela semble fonctionner correctement, mais dans d'autres, les comparaisons qui devraient être vraies ou qui devraient être fausses finissent dans le mauvais sens, ce qui rend difficile le repérage des bogues.
Je voudrais soutenir les diverses autres notions de l'infini avec quelque chose qui fonctionnera avec les nombres perl normaux et les nombres de précision arbitraires.
Mais j'ai aussi des inquiétudes sur les performances car certaines de mes comparaisons à l'infini se produisent dans des boucles internes serrées. De toute évidence inf
de Math::BigInt
va être plus lent que 9**9**9
(en raison de l'appel de méthodes liées ou surchargées sur chaque accès). Est-ce que quelqu'un a déjà traité ce problème par le passé? Si oui, quelle était votre solution?
J'ai pensé à utiliser ma propre constante pour l'infini, quelque chose défini comme ceci:
use constant INF => if_any_bignum_modules_loaded()
? Math::BigInt->binf
: 9**9**9;
Et puis en ajoutant la mise en garde à mon module que les modules de BigNum doivent être chargés en premier. Est-ce que cela semble raisonnable? Y at-il une implémentation fiable de if_any_bignum...
là-bas, ou devrais-je rouler le mien?
duplication possible de [Comment créer ou tester NaN ou infini en Perl?] (Http://stackoverflow.com/questions/1185822/how-do--create-or-test-for-nan- or-infinity-in-perl) – Ether
@Ether => s'il vous plaît lire la question avant de voter pour fermer, aucune des réponses à cette question ne couvre cette question ... –
ok, ce n'était pas très clair, car les questions sont identiques . – Ether