Common Lisp 在其标准中没有任意精确的浮点数。
Common Lisp 在标准中定义了四种浮点类型:SHORT-FLOAT
, SINGLE-FLOAT
, DOUBLE-FLOAT
, LONG-FLOAT
.
您可以使用该函数将比率强制转换为浮点数COERCE
(LispWorks 中的示例):
CL-USER 1 > (coerce (/ 1 7) 'double-float)
0.14285714285714285D0
or as a LONG-FLOAT
在 LISP 中
[1]> (coerce (/ 1 7) 'long-float)
0.14285714285714285714L0
要计算更长的浮点数,您需要 Common Lisp 的扩展。GNU CLISP https://www.gnu.org/software/clisp/有一个非便携式扩展,可以设置(二进制)位数:
(SETF (EXT:LONG-FLOAT-DIGITS) n) http://www.clisp.org/impnotes/num-concepts.html#lfd
Example:
[3]> (SETF (EXT:LONG-FLOAT-DIGITS) 1000)
1000
[4]> (coerce (/ 1 7) 'long-float)
0.142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857142857142857142857
142857142857142857142857142857142857143L0