最大值函数的输出
Output of a function in 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 声明为全局变量。我知道那会解决我的问题。
最好的问候,
利维特
嗯,问题是 F(x)^2
是用 block
之外的 fpprec
的值计算的,即 16。首先 F(x)
是用 fpprec
= 2;将该结果称为 foo
。然后用 fpprec
= 16 计算 foo^2
。
我不知道如何将 bigfloat 计算的精度限制为操作数的精度。使用简化规则(tellsimp
或 tellsimpafter
)可能是可能的,但如果是这样,可能并不容易。
这里有两个想法可以取得一些进展。 (1) 考虑使用有理数代替大浮点数。 IE。 return 7/5 而不是 1.4b-1。 (2) 如果您只是想限制打印的数字,请使用 fpprintprec
.
也许如果你在这里多说一下你更大的目标是什么,有人会给出一些建议。
我编写了一个函数 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 声明为全局变量。我知道那会解决我的问题。 最好的问候,
利维特
嗯,问题是 F(x)^2
是用 block
之外的 fpprec
的值计算的,即 16。首先 F(x)
是用 fpprec
= 2;将该结果称为 foo
。然后用 fpprec
= 16 计算 foo^2
。
我不知道如何将 bigfloat 计算的精度限制为操作数的精度。使用简化规则(tellsimp
或 tellsimpafter
)可能是可能的,但如果是这样,可能并不容易。
这里有两个想法可以取得一些进展。 (1) 考虑使用有理数代替大浮点数。 IE。 return 7/5 而不是 1.4b-1。 (2) 如果您只是想限制打印的数字,请使用 fpprintprec
.
也许如果你在这里多说一下你更大的目标是什么,有人会给出一些建议。