以最大值输出函数

时间:2017-04-01 11:11:29

标签: maxima

我编写了一个函数F,它根据一些特定的规则对输入进行舍入。例如,如果我的输入为F(0.1355),则会将其作为输出1.4b-1。问题在于,当我F(0.1355)^2时,它会给我1.96382999420166b-2,它应该给我0.14 ^ 2,即1.96b-2。为什么会这样?而且,我该如何解决?

这是我的功能代码:

F(x):=(block ([log10,aaa,fpprec],log10(x):=entier(log(x)/log(10)), 
    vnorm(x):= if x/(10^(log10(x)))<2 then 1/(10^(log10(x)-1)) else 1/10^(log10(x)),
     aaa(x):= x*vnorm(x),
    fpprec:if aaa(x)<20 then 2 else 1,bfloat((round(aaa(x)))*1/vnorm(x)))); `

更多信息:我无法将fpprec声明为全局变量。我知道这可以解决我的问题。 最好的问候,

Lievet。

1 个答案:

答案 0 :(得分:1)

好吧,问题是F(x)^2的计算值为fpprec block之外的值{16}。F(x)计算fpprec }} = 2;调用结果foo。然后使用foo^2 = 16

计算fpprec

我不知道如何将bigfloat计算的精度限制为操作数的精度。可以使用简化规则(tellsimptellsimpafter),但如果是这样,则可能并不容易。

在这里取得一些进展的两个想法。 (1)考虑使用有理数而不是bigfloats。即返回7/5而不是1.4b-1。 (2)如果您只是想限制打印的数字,请使用fpprintprec

也许如果你在这里详细说明你的更大目标是什么,有人会有一些建议。