我使用ECL和newlisp运行因子函数。
ECL:
>(defun fac (n) (if (= n 1) 1 (* n (fac (- n 1)))))
>(fac 20)
22432902008176640000
>(fac 30)
2265252859812191058636308480000000
>(fac 40)
815915283247897734345611269596115894272000000000
...newlisp
>(define (fac n) (if (= n 1) 1 (* n (fac (- n 1)))))
>(fac 20)
22432902008176640000
>(fac 30)
-8764578968847253504为什么newlisp会返回与ecl不同的结果?
发布于 2012-09-19 15:52:02
newLISP被设计成很小(~260K),默认情况下不会支持非常大的整数,以及在普通整数和大整数之间进行必要的自动转换。如果你经常需要像1000这样的整数!在你的工作中,你可能选择了错误的语言。但是,如果您出于其他原因想要使用newLISP,并且确实需要计算100!,那么请安装GMP库,并按如下方式编写代码:
(load "gmp.lsp")
(define (factorial-gmp num)
(if (= num 0)
"1"
(GMP:* (string num) (factorial-gmp (- num 1)))))发布于 2012-09-18 18:39:34
newLISP中最大的64位整数是9,223,372,036,854,775,807。
发布于 2012-09-19 00:35:47
尝试浮点:
(define (fac n) (if (= n 1) 1 (mul n (fac (sub n 1)))))
(fac 20) => 2.432902008e+18https://stackoverflow.com/questions/12470908
复制相似问题