0

我有一个非常简单的问题(我认为)。尽我所能,我找不到这个问题的答案。

我正在创建一个函数,我希望用户输入两个数字。第一个是要加在一起的某个无限级数的项数。第二个是用户希望截断的总和准确到的位数。

假设序列的项是 a_i。在 mpfr 中需要多少精度 n,以确保将这些 a_i 从 i=0 添加到用户输入的值的结果需要保证用户需要的位数?

顺便说一句,我以一种天真的方式添加了 a_i 。

任何帮助都感激不尽。

谢谢,

瑞克

4

1 回答 1

2

您可以使用对数在精度的十进制数字d精度的二进制数字b之间进行转换

b = d × log(10) / log(2)

稍微重新排列一下就说明了原因

b × log(2) = d × log(10)
log(2 b ) = log(10 d )
2 b = 10 d

该系列的每一项(以及每一项加法)都会在最低有效数字处引入舍入误差,因此,假设每t项涉及n(两个参数)算术运算,您将需要添加一个额外的

日志(t *(n +2))/日志(2)

位。

您需要将精度位数向上舍入,以确保您有足够的空间容纳十进制的精度

b = ceil((d*log(10.0) + log(t*(n+2)))/log(2.0));

最后,您应该知道这些条款可能会引入取消错误,在这种情况下,即使假设我一开始就做对了,这个简单的计算也会大大低估所需的位数;-)

于 2014-04-15T08:18:02.260 回答