如何将数字近似到n个小数位?

时间:2015-03-28 20:08:38

标签: math maxima

我几周前开始使用maxima(实际上我刚使用过几次)和OS X的wxMaxima界面。

我试图在网上找到解决方案,但也许是因为我是盲人,或者因为我在maxima的官方文档中没有太多经验,所以我还没有找到具体的解决方案。 / p>

如何将数字近似为n小数位数?例如,如果我使用float(22/7),它会给我这个巨大的数字3.142857142857143,但我只是想要将其近似到第3个小数位3.143

4 个答案:

答案 0 :(得分:4)

fpprec控制千里马bigfloat中的实际有效位数。这仅适用于bigfloats而不适用于普通(固定精度,IEEE 754)浮点数。

另请参阅fpprintprec,它控制打印的位数,适用于bigfloats和普通浮点数。所以另一个解决方案是:

(%i1) fpprintprec : 4 $
(%i2) float (22/7);
(%o2)                                3.143

答案 1 :(得分:2)

一种选择是定义

decimal_places(ex,n):=parse_string(printf(false,sconcat("~,",n,"f"),ex));

E.g。

decimal_places(22/7,4);

但是,要注意通过将十进制数表示为二进制浮点数而引起的数字舍入(内部)。

E.g。

printf(false,"~,1f",1.45);

返回1.4

printf(false,"~,3f",0.0145);

返回0.015。

这不是银行家'四舍五入(顺便说一下"回合"顺便说一下...... 将round(1.5);round(2.5);进行比较。

答案 2 :(得分:1)

我没有找到使用float近似数字的方法,但我找到了一种使用bfloat近似的方法。

来自official documentation

  

bfloat(expr)

     

expr中数字的所有数字和函数转换为bigfloat   数字。生成的 bigfloats 中的有效位数   由全局变量fpprec指定。

因此,通过使用类似的东西,我可以或多或少地实现我想要的东西:

bfloat(%e), fpprec:4;

输出是:

2.718b0

如果有人知道如何使用float功能,请发布。

答案 3 :(得分:0)

rnddp(x,dp):=float((round(x*10^dp)/10^dp));

rndcdp(z,dp):=rnddp(realpart(z),dp)+%i*rnddp(imagpart(z),dp);

rnddp将其第一个参数舍入到第二个参数中提供的小数位数。

rndcdp对复数也一样。

结果是近似值,而不仅仅是显示值。