циклы — Использование PHP для расчета Пи

Хорошо, это то, с чем я и мой коллега играем.
Мы знаем, что у PHP есть своя собственная функция PI, но это возникло из теории и любопытства.

Поэтому нам было интересно, если и как PHP смог рассчитать pi,
Формула pi знак равно π= 4/1 - 4/3 + 4/5 - 4/7 + 4/9...

Вот что мы сделали:

$theValue = 100;// the max
for ($i=1; $i<$theValue; $i++){
if ($i % 2 == 1){
$iWaardes[] =  4 / $i; // divide 4 by all uneven numbers and store them in an array
}
}
// Use the array's $keys as incrementing numbers to calculate the $values.
for ($a=0, $b=1, $c=2; $a<$theValue; $a+=3, $b+=3, $c+=3 ){
echo ($iWaardes[$a] - $iWaardes[$b] + $iWaardes[$c]).'<br>';
}

Итак, теперь у нас есть цикл, который рассчитал первую серию 4/1 - 4/3 + 4/5 но он останавливается после этого и начинается заново со следующими 3 последовательностями.
Как мы можем сделать это запустить весь $theValue и рассчитать всю серию?

Пожалуйста, имейте в виду, что в этом нет ничего серьезного и просто веселого эксперимента для нас.

3

Решение

Просто используйте одну петлю. Есть $bottom переменная, которую вы добавляете 2 на каждой итерации, делите на нее и складываете / вычитаете ее в зависимости от модуля:

$theValue = 10000; // the max
$bottom = 1;
$pi = 0;
for ($i = 1; $i < $theValue; $i++) {
if ($i % 2 == 1) {
$pi += 4 / $bottom;
} else {
$pi -= 4 / $bottom;
}
$bottom += 2;
}
var_dump($pi); // 3.14169266359

демонстрация

Что не так с вашим кодом (кроме деления на соответствующее число) является второй цикл. Вы по какой-то причине распечатываете сохраненные числа 3 на 3. Это, пока $a, который увеличивается на 3, ниже, чем $theValue что намного выше. Так, например, если $theValue 10, вам нужно всего 2 цикла, прежде чем вы начнете выходить из связанных ошибок.

2

Другие решения

Вы думаете об этом. Просто используйте модуль по модулю, чтобы решить, хотите ли вы добавить или вычесть и сделать это на месте.

$theValue = 100;// the max
$pi = 0;
for ($i=1; $i<$theValue; $i++){
if ($i % 2 == 1){
$pi += 4.0 / ($i * 2 - 1);
} else {
$pi -= 4.0 / ($i * 2 - 1);
}
}
4

pi() Возвращает приближение числа пи. Возвращаемое значение с плавающей точкой имеет точность, основанную на директиве precision в php.ini, который по умолчанию равен 14. Также вы можете использовать константу M_PI, которая дает идентичные результаты для pi ()

источник

Используя PHP, мы также можем вычислять Pi, хотя и очень медленно.

$pi = 4; $top = 4; $bot = 3; $minus = TRUE;
$accuracy = 1000000;

for($i = 0; $i < $accuracy; $i++)
{
$pi += ( $minus ? -($top/$bot) : ($top/$bot) );
$minus = ( $minus ? FALSE : TRUE);
$bot += 2;
}
print "Pi ~=: " . $pi;

Этот метод вычисления Пи медленный, но он легко читается.
Вы можете прочитать больше об этом методе здесь:
http://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80

Если вы увеличите переменную $ precision, Pi будет вычисляться все более и более точно. В зависимости от скорости вашего веб-сервера, вы можете довольно быстро вычислить первые 6 цифр числа Пи.

Однако время, необходимое для вычисления каждого последующего числа, увеличивается в геометрической прогрессии. Для вычисления 20 цифр числа Пи с использованием этого метода может потребоваться годы.

0
По вопросам рекламы [email protected]