将科学计数法输出为十进制计数法

Posted

技术标签:

【中文标题】将科学计数法输出为十进制计数法【英文标题】:Output scientific notation as decimal notation 【发布时间】:2012-12-11 11:25:57 【问题描述】:

我正在使用http://www.solve-et-coagula.com/As3Lisp.html 运行一个基本的阶乘函数。

它以科学计数法输出结果,但我想查看完整的“扩展”数字。

(defun factorial (n)
 (cond ((= n 0) 1)
       (t (* n (factorial (- n 1))))))

然后

(factorial 100)

9.33262154439441e+157

我尝试了各种format 命令,(format t "~D" (factorial 100)) 看起来像是赢家,但它不起作用。也试过设置(setq *READ-DEFAULT-FLOAT-FORMAT* 'double-float),但还是不行。

是我的命令有问题,还是环境有问题?

【问题讨论】:

谁知道这是什么类型的 Lisp 以及实现提供了什么?如果你有兴趣,何不问问作者呢? 我才刚开始,所以我不确定我有多“感兴趣”:) 主要是想知道如何让它工作,所以我有一个可靠的起点。从您的评论看来,改变环境可能会有所帮助? 如果你想学习 Lisp,我建议使用 Lisp 实现并提供一些文档。使用像 Common Lisp 或 Scheme 这样成熟的方言也会有所帮助。 @wxvw - 啊,这就是我正在寻找的解决方案。如果发布,将接受作为解决方案。 链接 http://www.solve-et-coagula.com/As3Lisp.html 已失效 (404)。我很想知道它指向什么。 【参考方案1】:

事实证明,不同的环境可以解决问题。

我使用了 Gnu Common Lisp (http://www.cs.utexas.edu/~novak/gclwin.html),答案按预期返回。

【讨论】:

在这篇文章之前我没有听说过协鑫。***说 GCL 还没有完全符合 CL 规范。我不知道在 wikipedia 上的那个声明中有多少库存......但是如果你要在你的机器上安装 CL 环境,还有其他完全兼容的替代方案:Clozure Common Lisp (CCL)、Steel-Bank Common Lisp (SBCL)、CMUCL,适合初学者。【参考方案2】:

如果您的实现支持srfi-28(格式),那么我认为 ~F 会解决问题。 关于鸡计划:

#;1> (use format)
; loading /usr/local/lib/chicken/6/format.import.so ...
; loading /usr/local/lib/chicken/6/chicken.import.so ...
; loading /usr/local/lib/chicken/6/srfi-13.import.so ...
; loading /usr/local/lib/chicken/6/data-structures.import.so ...
; loading /usr/local/lib/chicken/6/ports.import.so ...
; loading /usr/local/lib/chicken/6/extras.import.so ...
; loading /usr/local/lib/chicken/6/format.so ...
#;2> (format #t "~F~%" (factorial 100))
93326215443944100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0
#t

查看format egg specification

干杯。

【讨论】:

以上是关于将科学计数法输出为十进制计数法的主要内容,如果未能解决你的问题,请参考以下文章

JAVA如何将浮点数输出为指定位数的科学计数法?

在 C++ 中将科学计数法转换为十进制

科学计数法到普通十进制输出的转换

将具有科学计数法的字符串列表转换为十进制数

将科学计数法中的十进制数转换为 IEEE 754

如何使用 plink/Unix 将数据从科学计数法转换为十进制?