En uno de mis módulos, tengo que lidiar con el concepto de infinito. Hasta la fecha, he estado usando 9**9**9
como infinito positivo, y esto parece funcionar bien, es rápido, y parece ser lo que los internos de Perl usan como infinito.¿Cuál es la mejor manera de verificar el infinito en un módulo Perl?
Sin embargo, las cosas se ponen un poco incierto si un usuario de mi módulo decide utilizar uno de los grandes módulos numéricos (como use bigint;
), y luego usan inf
o Math::BigInt->binf()
para representar el infinito.
En algunos lugares parece funcionar bien, pero en otros, las comparaciones que deben ser ciertas o deben ser falsas terminan en el camino equivocado, lo que lleva a errores difíciles de localizar.
Me gustaría apoyar las otras nociones de infinito con algo que funcionará con números de perl normales y números de precisión arbitrarios.
Pero también me preocupa el rendimiento, ya que algunas de mis comparaciones con el infinito ocurren en circuitos internos estrechos. Obviamente, inf
de Math::BigInt
va a ser más lento que 9**9**9
(debido a métodos de llamada atada o sobrecargada en cada acceso). ¿Alguien ha lidiado con este problema en el pasado? Si es así, ¿cuál fue su solución?
He pensado en el uso de mi propia constante para el infinito, algo que se define así:
use constant INF => if_any_bignum_modules_loaded()
? Math::BigInt->binf
: 9**9**9;
Y a continuación, añadir la salvedad de que mi módulo que cualquier módulo bignum deben cargarse en primer lugar. ¿Esto suena sensato? ¿Hay una implementación confiable de if_any_bignum...
por ahí, o debería lanzar la mía?
posible duplicado de [¿Cómo creo o pruebo para NaN o infinito en Perl?] (Http://stackoverflow.com/questions/1185822/how-do-i-create-or-test-for-nan- or-infinito-en-perl) – Ether
@Ether => lea la pregunta antes de cerrar la votación, ninguna de las respuestas en esa pregunta cubre esta pregunta ... –
bien, eso no estaba muy claro, ya que las preguntas son idénticas . – Ether