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

[玩转系统] 天空中的圆周率

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

天空中的圆周率


[玩转系统] 天空中的圆周率

在我们开始之前,我希望您知道您始终可以使用 [Math] 类获取值:

[玩转系统] 天空中的圆周率

但这有什么乐趣呢?首先是我的 Gregory-Leibniz 系列的 PowerShell 版本。这是通过从无穷级数中推导出 pi 来实现的。

π=(4/1) - (4/3) + (4/5) - (4/7) + (4/9) - (4/11) + (4/13) - (4/15)…

看起来很简单。我需要大范围的奇数分母。然后我需要交替进行加法和减法。我需要一个循环,并且可以使用模运算符 (%) 来每次循环进行测试。如果我的数字是偶数,我就加,否则我就减。这就是我的想法。

#total number of denominators to use
$total = 10000
$a = 1
$d=@($a)
#build array of odd numbers
do {
$a+=2
$d+=$a
} until ($d.count -ge $total)

$pi = 0
for ($i=0;$i -lt $d.count;$i++) {
if ($i%2) {
$pi-= 4/$d[$i]
}
else {
$pi+= 4/$d[$i]
}
}
$pi

这需要一点时间,但很有效。

[玩转系统] 天空中的圆周率

然后我想尝试一下 Nilakantha 系列。

π=3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6*7*8) - 4/(8*9*10) + 4/(10*11*12) - 4/(12*13*14) …

有些原则是相同的。这里棘手的部分是循环遍历数字集合并对它们进行分组。

$n=2..10000
$pi = 3
#need a counter to to know whether to add or subtract
$tick = 0
#loop through the numbers
for ($i=0;$i -lt $n.count-1;$i+=2) {
if ($tick%2) {
$pi-= 4/($n[$i] * $n[$i+1] * $n[$i+2])
}
else {
$pi+= 4/($n[$i] * $n[$i+1] * $n[$i+2])
}
$tick++
}
$pi

就您可以计算的无理数而言,这明显更快、更准确。

[玩转系统] 天空中的圆周率

最后一种方法是使用反正弦函数/反正弦函数:

pi=2 * (Arcsin(sqrt(1 - x^2))) + abs(Arcsin(x))

这在 PowerShell 中有点棘手,但可以通过 [Math] 类来完成。你必须注意括号。

$x = 0.987654
$pi = 2 * (([math]::Asin([math]::Sqrt(1-([math]::Pow($x,2))))) + [math]::Abs([math]::Asin($x)))

$x 的值介于 -1 和 1 之间。

[玩转系统] 天空中的圆周率

速度也很快,尽管阅读起来有点费眼睛。

现在请原谅,我有一些圆圈需要测量。

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

取消回复欢迎 发表评论:

关灯