如果要解构一个浮点数,我们首先要确保它是一个 bigfloat。说 z: 34.1
您可以使用 lisp 访问 bigfloat 的各个部分,也可以通过?fpprec
.
因此 ?second(z)*2^(?third(z)-?fpprec)
给你:
4799148352916685/140737488355328
并bfloat(%)
给你:
3.41b1.
如果您希望 z 的尾数为整数,请查看?second(z)
现在我不确定您要以 10 为底完成什么,但 Maxima 不会以 10 为底进行内部算术。
如果您想要更多或更少的位,您可以设置 fpprec,它链接到?fpprec
. fpprec 是“大约以 10 为底”的精度。因此 fpprec 最初是 16
?fpprec
,相应地是 56。
您可以轻松更改它们,例如 fpprec:100 对应于?fpprec
335。
如果您在使用浮点表示,您可能会受益于知道您可以通过键入来查看任何 lisp,例如,
?print(z)
它使用 Lisp 打印功能打印内部表单。
您还可以通过跟踪跟踪任何功能,您自己的或系统功能。例如,您可以考虑这样做:
trace(append,rnd,integrate);
如果你想使用机器花车,我建议你在最后一行使用,
对于从 30 到 1 步 -1 的 n,请执行以下操作:
Ibwd:append([[n-1,rnd(1/(2.0*n- 1.0)-a*last(first(Ibwd)),d)]],Ibwd);
注意小数点。但即使这样还不够,因为集成插入了像 atan(10) 这样的精确结构。尝试四舍五入或计算它们的日志可能不是您想要做的。我怀疑 Maxima 不高兴,因为 log 被赋予了一些混乱的表达,结果证明是负面的,即使它最初认为不是这样。它将数字交给 lisp 日志程序,该程序非常乐意返回适当的 common-lisp 复数对象。不幸的是,Maxima 的大部分内容是在 LISP 有复数之前编写的。
因此(log -0.5)= #C(-0.6931472 3.1415927)
,Maxima 的其他人完全出乎意料。Maxima 有自己的复数形式,例如3+4*%i
.
特别是,Maxima 显示程序早于常见的 lisp 复数格式,并且不知道如何处理它。
错误(堆栈溢出!!!)来自显示程序试图显示一个常见的 lisp 复数。
如何解决这一切?好吧,你可以尝试改变你的程序,让它计算你真正想要的,在这种情况下,它可能不会触发这个错误。Maxima 的显示程序也应该是固定的。另外,我怀疑在简化负数但显然不是这样的数字对数时有些不幸。
对于原始海报来说,这可能是太多的信息,但也许上面的段落会有所帮助,也可能在一个或多个地方改进 Maxima。