当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 周五乐趣:Pi-罗马尼亚

作者:精品下载站 日期:2024-12-14 07:39:56 浏览:14 分类:玩电脑

周五乐趣:Pi-罗马尼亚


[玩转系统] 周五乐趣:Pi-罗马尼亚

PS C:\> [math]::pi
3.14159265358979

但这个周五的乐趣与旅程一样重要。我开始寻找一种可以用来计算 pi 的算法。我决定使用高斯-勒让德算法。一般过程是迭代一系列方程,每一次都让你更接近 pi。

[玩转系统] 周五乐趣:Pi-罗马尼亚

然后 Pi 的计算如下:

[玩转系统] 周五乐趣:Pi-罗马尼亚

根据我的研究,我知道起始值应该是什么。由于稍后会清楚的原因,我将变量明确定义为数组。

$a = @(1)
$b = @(1/[math]::Sqrt(2))
$t = @(1/4)
$p = @(1)

正如您所看到的,我仍然需要依赖 [Math] 类来处理诸如 2 的平方根之类的事情。现在是有趣的部分。该算法循环,变量的每个后续值都基于当前变量的计算。我的解决方案是使用 For 循环并运行每个变量的方程,我还决定每次通过循环评估 pi ,这样我就可以看到我有多接近。

for ($n=0;$n -lt 3;$n++) {
#each time through the array add a new value to each array using the += operator
$a+= ($a[$n]+$b[$n])/2
$b+= [math]::Sqrt(($a[$n]*$b[$n]))
$t+= $t[$n] - ($p[$n] * ([math]::Pow(($a[$n] - $a[$n+1]),2)))
$p+= 2*$p[$n]
([math]::Pow($a[$n+1] +$b[$n+1],2))/(4 *($t[$n+1]))
}

效果很好,因为 $n 可以作为每个计算变量的索引号,这样我就可以获得最终计算的正确值。 for 循环从 $n=0 开始,并在 $n 小于或等于 3 时循环。每次循环,$n 都会增加 1 ($n++)。您可能想知道为什么我只循环到 3。好吧,这就是我运行我的小脚本时发生的情况。


PS C:\> Get-Pi.ps1
3.14057925052217
3.14159264621354
3.14159265358979

无论我运行循环多少次,我都不会得到比 3.14159265358979 更精确的值,它恰好与 [math]::pi 的值相同。我认为可能有一种方法可以强制 PowerShell 或 .NET 将计算运行到更多小数位,但这显然有点超出了我的 .NET 薪资等级。但我希望您了解 For 构造或数组的一些知识。不要问我数学问题。我可以输入数字,但我不知道这意味着什么。但我玩得很开心,希望你也能这么做。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯