gpt4 book ai didi

LISP - 小数点后的数字

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:52 25 4
gpt4 key购买 nike

有谁知道如何在 Lisp 中为 float 指定小数点后的位数?

假设我在 REPL 中打印这条命令:

CL-USER 3 > (format t "~,15f" (float (/ 1 7)))

我得到:

0.142857150000000 

但是这个数字在小数点后第8位四舍五入,我需要看很多小数点后的数字才能看这个数字是否循环并计算周期。(实际上我开始尝试解决欧拉计划的问题 26)。

我需要这样的东西:

CL-USER 3 > (format t "~,15f" (float (/ 1 7)))
0.142857142857142857142857142857142857....

谢谢,

卢卡

最佳答案

Common Lisp 在其标准中没有任意精确的 float 。

Common Lisp 在标准中定义了四种浮点类型:SHORT-FLOATSINGLE-FLOATDOUBLE-FLOATLONG - float

您可以使用函数 COERCE(LispWorks 中的示例)将比率强制转换为 float :

CL-USER 1 > (coerce (/ 1 7) 'double-float)
0.14285714285714285D0

或作为 CLISP 中的 LONG-FLOAT

[1]> (coerce (/ 1 7) 'long-float)
0.14285714285714285714L0

要使用更长的 float 进行计算,您需要对 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

关于LISP - 小数点后的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11984746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com