2009-11-24 13 views
5

PHP'deki pi değerini X ondalık sayılara kadar nasıl hesaplayabilirim.PHP'de belirli bir sayıdaki rakam nasıl hesaplanabilir?

4 ondalık noktaları

3,141

64 ondalık noktaları

3,141592653589793238462643383279502884197169399375105820974944592

+0

ana sorun 100000 ondalık sayıya kadar pi'nin değerini hesaplamaktır ... – d3vdpro

+0

Nitekim '3' ondalık basamakta değil (ondalık basamaktan sonra bir basamak, '.'), bu sayılar Sırasıyla sadece 3 ve 63 ondalık hane vardır. – ajp15243

cevap

0

PHP'de PI hesaplanıyor mu?

Neden M_PI sabit kaldığımızı hesaplıyoruz?

M_PI, 3.14159265358979323846 değerini içerir.

PI için 10000 ondalık basamak oldukça sayıdır.

bakınız: O PHP dahil PI sabit daha iyi olmayacak olsa http://www.php.net/manual/en/math.constants.php

+3

Görünüşe göre, php.ini dosyasındaki 'pi()'/'M_PI 'hassasiyetini ayarlayabilirsiniz. Yine de 11^H 100K'ye gittiğinden emin değilim. :) http://php.net/manual/en/function.pi.php – deceze

+1

Çok kötü, görünüşe göre sistemimde en az 48 tane var. :) – deceze

+0

bunu işe yarıyor için teşekkürler! – mauris

-4

PHP, 22/7 PI hesaplamak için eski bir yol olduğunu sürece bildiğim kadarıyla bir sayı tutun ama olamaz . Belki bir egzersiz olarak uzun bir PI dizisi çıkarmaya çalışıyorsunuzdur.

+3

22/7, neredeyse doğru değil; yerli PHP sabiti, belirli bir sistemde mümkün olan en hassas kesinliktir. – Dan

3

Gönderilen kırık bağlantı @Konamiman için kaynak bulundu.

Sonuçlarla karşılaştırıldı: http://www.angio.net/pi/digits/50.txt ve bunlar aynı.

// Source: http://mgccl.com/2007/01/22/php-calculate-pi-revisited 
function bcfact($n) 
{ 
    return ($n == 0 || $n== 1) ? 1 : bcmul($n,bcfact($n-1)); 
} 
function bcpi($precision) 
{ 
    $num = 0;$k = 0; 
    bcscale($precision+3); 
    $limit = ($precision+3)/14; 
    while($k < $limit) 
    { 
     $num = bcadd($num, bcdiv(bcmul(bcadd('13591409',bcmul('545140134', $k)),bcmul(bcpow(-1, $k), bcfact(6*$k))),bcmul(bcmul(bcpow('640320',3*$k+1),bcsqrt('640320')), bcmul(bcfact(3*$k), bcpow(bcfact($k),3))))); 
     ++$k; 
    } 
    return bcdiv(1,(bcmul(12,($num))),$precision); 
} 

echo bcpi(1000); 
0

Pi'yi Chudnosky serisi tarafından hesaplayabilirsiniz. Çok yüksek bir ram olan bir sunucunuz varsa, Pi'yi birçok ondalık basamağa kolayca hesaplayabilirsiniz. Belirli bir ondalık basamağa yönlendirmek istiyorsanız, çok büyük bir sayıya kadar olan çabaları artırın ve substr numarasını istediğiniz ondalık basamağa kısaltın. Bu işlemin çok yavaş olduğunu düşünüyorsanız, google'da arama yaparak pi değeri alabilirsiniz.

+0

Bu, seri yavaşça birleştikçe bunu yapmak için çok yavaş bir yoldur. –

+1

@Salixalba Gördüğünüz gibi, orada yazdım '... çok ram olan bir sunucu ...'. –

+0

http://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80 adresinden Dizinin doğrudan özetini kullanarak dec - 10 doğru ondalık basamağın hesaplanması yaklaşık 5.000.000.000 terim gerektirir. Soruna daha fazla ram atmak, http://en.wikipedia.org/wiki/Approximations_of_%CF%80 adresinde olduğu gibi farklı bir formül denemek için çok daha iyi olmayacaktır. –

İlgili konular