在Common Lisp中是否存在表示无穷大或无数字(NAN)的实现独立方式?它需要是双浮点数,并且具有正值和负值.在SBCL,结果
(apropos "INFINITY")
Run Code Online (Sandbox Code Playgroud)
包括
SB-EXT:DOUBLE-FLOAT-NEGATIVE-INFINITY (bound)
SB-EXT:DOUBLE-FLOAT-POSITIVE-INFINITY (bound)
Run Code Online (Sandbox Code Playgroud)
但我需要它在所有实现中都可用.我有一个编写包的附录,可以在所有平台上运行,它需要表示无限和NAN.即使是其他图书馆的功能也足够了.
我iee-floats装了,现在它是我图书馆的一部分.我有一个功能,可以检测数字是否为NaN,以及检测数字是否为无穷大的函数; 我没有测试NaN,但是我的无限函数需要数字为双浮点数.SBCL的SB-EXT:DOUBLE-FLOAT-POSITIVE-INFINITY作品,但我需要它独立于实现.
Jos*_*lor 13
Rosetta Code 在Infinity的Common Lisp部分中的条目说:
Common Lisp未指定无穷大值.但是,某些实现可能支持IEEE无限.例如,CMUCL支持IEEE特殊值.Common Lisp确实指定实现定义具有大多数(和最少)正(和负)值的常量.这些可能因实现而异.
Cliki列出了一个可能有用的ieee-floats包(但请注意它的含义:infinity):
IEEE-Floats提供了一种将float和double-float类型的值转换为IEEE 754(通常由处理器和网络协议使用)定义的二进制格式表示的方法.
该库定义了常见的32位和64位格式的编码和解码功能,以及用于定义其他格式的类似功能的宏.默认函数不会检测NaN或无穷大的特殊情况,但可以生成函数,在这种情况下,使用关键字:not-a-number,:positive-infinity和:negative-infinity来表示它们.
听起来你最好的可能是在你想要支持的实现中找到一些IEEE值,并编写一个跨平台兼容层[当然,你应该发布并与其他人共享:)].