gpt4 book ai didi

Erlang 计算 Pi 到 X 位小数

转载 作者:行者123 更新时间:2023-12-02 00:04:44 24 4
gpt4 key购买 nike

我收到这个问题是为了寻找解决方案。我正在努力理解递归。对问题进行一些分解会非常有帮助。

鉴于 Pi 可以使用函数 4 * (1 – 1/3 + 1/5 – 1/7 + …) 进行估计,更多项可以提供更高的精度,请编写一个函数来计算 Pi,精度为小数点后 5 位地点。

我有一些示例代码,但是我真的不明白变量在哪里/为什么这样输入。我们将不胜感激该代码的可能分解以及为什么它不准确。

-module (pi).
-export ([pi/0]).

pi() -> 4 * pi(0,1,1).

pi(T,M,D) ->
A = 1 / D,
if
A > 0.00001 -> pi(T+(M*A), M*-1, D+2);
true -> T
end.

最佳答案

该公式来自于tg(pi/4)等于1的计算。其倒数为:

pi/4 = arctg(1)
so
pi = 4* arctg(1).
using the technique of the Taylor series:
arctg (x) = x - x^3/3 + ... + (-1)^n x^(2n+1)/(2n+1) + o(x^(2n+1))
so when x = 1 you get your formula:
pi = 4 * (1 – 1/3 + 1/5 – 1/7 + …)

问题是找到 pi 的近似值,精度为 0.00001(小数点后 5 位)。看看公式,你会发现在每一步(1/3,1/5,...)添加新术语:

  • 比前一个小,
  • 具有相反的符号。

这意味着每一项都是 pi 的实际值与此项的评估之间误差的上限估计(项 o(x^(2n+1)))。因此,它可以用来将递归停止在保证近似值比此项更好的水平上。为了正确起见,该程序您建议将递归的最终结果乘以 4,因此不再保证误差小于 term。

查看代码:

pi() -> 4 * pi(0,1,1).
% T = 0 is the initial estimation
% M = 1 is the sign
% D = 1 initial value of the term's index in the Taylor serie

pi(T,M,D) ->
A = 1 / D,
% evaluate the term value
if
A > 0.00001 -> pi(T+(M*A), M*-1, D+2);
% if the precision is not reach call the pi function with,
% new serie's evaluation (the previous one + sign * term): T+(M*A)
% new inverted sign: M*-1
% new index: D+2
true -> T
% if the precision is reached, give the result T
end.

为了确保您达到正确的精度,我建议将 A > 0.00001 替换为 A > 0.0000025 (= 0.00001/4) >)

关于Erlang 计算 Pi 到 X 位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20333717/

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