我编写了一个函数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。
答案 0 :(得分:1)
好吧,问题是F(x)^2
的计算值为fpprec
block
之外的值{16}。F(x)
计算fpprec
}} = 2;调用结果foo
。然后使用foo^2
= 16
fpprec
我不知道如何将bigfloat计算的精度限制为操作数的精度。可以使用简化规则(tellsimp
或tellsimpafter
),但如果是这样,则可能并不容易。
在这里取得一些进展的两个想法。 (1)考虑使用有理数而不是bigfloats。即返回7/5而不是1.4b-1。 (2)如果您只是想限制打印的数字,请使用fpprintprec
。
也许如果你在这里详细说明你的更大目标是什么,有人会有一些建议。