Попытка вычислить пи с использованием алгоритма Чудновского в Stack Overflow

Я пытался создать несколько пи-приближений, используя разные методы, и алгоритм Чудновского выглядел забавно, но я наткнулся на контрольно-пропускной пункт.

дорожное заграждение

Вот код:

$pi =0;
for ($k = 0; $k < 1; $k++) {
$pi += (($k%2==1?-1.0:1.0) * gmp_fact(6 * $k) * (13591409.0 + (545140134.0 * $k))) / (gmp_fact(3.0 * $k) * pow(gmp_fact($k), 3.0) * pow(640320.0, 3.0 * $k + 3.0/2.0));
}
$pi *= 12;
echo 1/$pi;

Запуск этого дает мне 301.59289474461.

Я новичок в php и подумал, что это будет хорошая тренировка, так что простите, если это любительская работа.

Я также понимаю, что есть похожий пост в c ++, который я пытался и был успешным, но это все еще не удалось. Я использовал обмен стека для решения многих других проблем, поэтому я надеюсь, что вы можете помочь!

1

Решение

Убедитесь, что у вас установлено расширение gmp, и всегда используйте gmp_strval () при использовании функций gmp в php, чтобы избежать получения адрес объекта gmp_fact, умноженный на другие переменные.
С php.net: http://php.net/manual/en/function.gmp-fact.php#refsect1-function.gmp-fact-returnvalues

$pi =0;
for ($k = 0; $k < 20; $k++) {
$pi += (($k%2==1?-1.0:1.0) * gmp_strval(gmp_fact(6 * $k)) * (13591409.0 + (545140134.0 * $k))) / ( gmp_strval(gmp_fact(3.0 * $k)) * pow( gmp_strval(gmp_fact($k)), 3.0) * pow(640320.0, 3.0 * $k + 3.0/2.0));
}
$pi *= 12;
echo 1/$pi;
2

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

Других решений пока нет …