Common Lisp 在其标准中没有任意精确的浮点数。
Common Lisp 在标准中定义了四种浮点类型:SHORT-FLOAT
, SINGLE-FLOAT
, DOUBLE-FLOAT
, LONG-FLOAT
。
您可以使用该函数将比率强制为浮点数COERCE
(LispWorks 中的示例):
CL-USER 1 > (coerce (/ 1 7) 'double-float)
0.14285714285714285D0
或作为LONG-FLOAT
CLISP 中的
[1]> (coerce (/ 1 7) 'long-float)
0.14285714285714285714L0
要使用更长的浮点数进行计算,您需要对 Common Lisp 进行扩展。GNU CLISP有一个不可移植的扩展,可以设置(二进制)位数:
(SETF (EXT:LONG-FLOAT-DIGITS) n)
例子:
[3]> (SETF (EXT:LONG-FLOAT-DIGITS) 1000)
1000
[4]> (coerce (/ 1 7) 'long-float)
0.142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857143L0