In einem meiner Module muss ich mich mit dem Konzept der Unendlichkeit beschäftigen. Bis jetzt habe ich 9**9**9
als positive Unendlichkeit verwendet, und das scheint gut zu funktionieren, ist schnell und scheint das zu sein, was Perls Inneres als Unendlichkeit benutzt.Wie kann man in einem Perl-Modul am besten auf Unendlichkeit prüfen?
Allerdings wird es etwas heikel, wenn ein Benutzer von meinem Modul eine der großen Anzahl Module zu verwenden, entscheidet (wie use bigint;
), und sie verwenden, dann inf
oder Math::BigInt->binf()
Unendlichkeit darzustellen.
An einigen Stellen scheint es gut zu funktionieren, aber in anderen, führen Vergleiche, die wahr sein sollten oder falsch sein sollten, auf den falschen Weg, was dazu führte, dass Bugs schwer zu finden waren.
Ich möchte die verschiedenen anderen Begriffe der Unendlichkeit mit etwas unterstützen, das sowohl mit normalen Perl-Zahlen als auch mit beliebigen Präzisionszahlen funktionieren wird.
Aber ich habe auch Bedenken hinsichtlich der Leistung, da einige meiner Vergleiche mit Unendlichkeit in engen inneren Schleifen auftreten. Offensichtlich inf
von Math::BigInt
wird langsamer sein als 9**9**9
(wegen entweder Aufruf gebunden oder überladen Methoden bei jedem Zugriff). Hat sich jemand in der Vergangenheit mit diesem Problem beschäftigt? Wenn ja, was war Ihre Lösung?
Ich habe darüber nachgedacht, meine eigene Konstante verwendet für die Unendlichkeit, definiert etwas wie folgt aus:
use constant INF => if_any_bignum_modules_loaded()
? Math::BigInt->binf
: 9**9**9;
Und dann das Vorbehalt zu meinem Modul, das alle bignum Module zuerst geladen werden soll. Klingt das sinnvoll? Gibt es eine zuverlässige Implementierung von if_any_bignum...
da draußen, oder sollte ich meine eigene rollen?
mögliche Duplikate von [Wie erstelle oder teste ich NaN oder Unendlich in Perl?] (Http://stackoverflow.com/questions/1185822/how-do-i-create-o-test-for-nan- oder-infinity-in-perl) – Ether
@Ether => Bitte lesen Sie die Frage vor der Abstimmung zu schließen, keine der Antworten in dieser Frage diese Frage abdecken ... –
ok, das war nicht sehr klar, da die Fragen identisch sind . – Ether