首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于newlisp中的阶乘

关于newlisp中的阶乘
EN

Stack Overflow用户
提问于 2012-09-18 13:32:00
回答 5查看 352关注 0票数 0

我使用ECL和newlisp运行因子函数。

ECL:

代码语言:javascript
复制
>(defun fac (n) (if (= n 1) 1 (* n (fac (- n 1)))))
>(fac 20)
22432902008176640000
>(fac 30)
2265252859812191058636308480000000
>(fac 40)
815915283247897734345611269596115894272000000000
...

newlisp

代码语言:javascript
复制
>(define (fac n) (if (= n 1) 1 (* n (fac (- n 1)))))
>(fac 20)
22432902008176640000
>(fac 30)
-8764578968847253504

为什么newlisp会返回与ecl不同的结果?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-19 15:52:02

newLISP被设计成很小(~260K),默认情况下不会支持非常大的整数,以及在普通整数和大整数之间进行必要的自动转换。如果你经常需要像1000这样的整数!在你的工作中,你可能选择了错误的语言。但是,如果您出于其他原因想要使用newLISP,并且确实需要计算100!,那么请安装GMP库,并按如下方式编写代码:

代码语言:javascript
复制
(load "gmp.lsp")
(define (factorial-gmp num)
 (if (= num 0)
  "1"
  (GMP:* (string num) (factorial-gmp (- num 1)))))
票数 1
EN

Stack Overflow用户

发布于 2012-09-18 18:39:34

newLISP中最大的64位整数是9,223,372,036,854,775,807。

票数 2
EN

Stack Overflow用户

发布于 2012-09-19 00:35:47

尝试浮点:

代码语言:javascript
复制
(define (fac n) (if (= n 1) 1 (mul n (fac (sub n 1)))))

(fac 20) => 2.432902008e+18
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12470908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档