gpt4 book ai didi

c++ - 一种计算数学常数 e 的有效方法

转载 作者:IT老高 更新时间:2023-10-28 12:44:49 25 4
gpt4 key购买 nike

由于许多除法运算,常数 e 作为无限级数之和的标准表示对于计算来说非常低效。那么有没有其他方法可以有效地计算常数?

谢谢!

编辑

在关注了你的一些链接之后,我相信效率来自一种我不熟悉的称为二进制拆分的技术(虽然表示仍然提到系列)。如果有人熟悉它,请随时贡献。

最佳答案

由于不可能计算出“e”的每个位,因此您必须选择一个停止点。

double :16 位小数

对于实际应用,“尽可能接近 'e' 真实值的 64 位 double 浮点值——大约 16 位十进制数字”绰绰有余。

正如 KennyTM 所说,该值已经在数学库中为您预先计算好了。如果你想自己计算,正如 Hans Passant 指出的那样,阶乘已经增长得非常快。该系列中的前 22 项对于计算该精度来说已经过大了——如果将结果存储在 64 位 double 浮点变量中,则从该系列中添加更多项不会改变结果。我认为你眨眼所花的时间比你的电脑做 22 次除法的时间要长。所以我认为没有任何理由进一步优化它。

千、百万或数十亿十进制数字

正如 Matthieu M. 所指出的,这个值已经计算过了,你可以从 Yee 的网站下载。

如果您想自己计算,那么标准的 double float 将无法容纳这么多数字。你需要一个“bignum”库。与往常一样,您可以使用现有的众多免费 bignum 库之一,也可以通过构建自己的另一个具有自己特殊特性的 bignum 库来重新发明轮子。

结果 - 一个长数字文件 - 不是非常有用,但计算它的程序有时用作测试“bignum”库软件的性能和准确性的基准,以及检查稳定性的压力测试和新机器硬件的冷却能力。

一页非常简短地描述了the algorithms Yee uses to calculate mathematical constants .

维基百科 "binary splitting" article进入更多细节。我认为您正在寻找的部分是数字表示:而不是在内部将所有数字存储为小数点(或二进制点)前后的一长串数字,Yee 将每个项和每个部分和存储为一个有理数——作为两个整数,每个整数都是一长串数字。例如,假设其中一个工作 CPU 被分配了部分和,

... 1/4! + 1/5! + 1/6! + ... .

而不是先对每个项进行除法,然后相加,然后将一个百万位数的定点结果返回给管理器 CPU:

// extended to a million digits
1/24 + 1/120 + 1/720 => 0.0416666 + 0.0083333 + 0.00138888

那个CPU可以先用有理算术把级数中的所有项相加,然后将有理结果返回给管理器CPU:两个整数,每个可能几百位数:

// faster
1/24 + 1/120 + 1/720 => 1/24 + 840/86400 => 106560/2073600

以这种方式将数千个项相加后,管理器 CPU 在最后进行唯一除法以获得小数点后的小数位数。

记住避免PrematureOptimization , 和总是 ProfileBeforeOptimizing .

关于c++ - 一种计算数学常数 e 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com