• 03-02-2009, 19:13:34
    #10
    GMP ile ilgili birşeyler vardı (tam hatırlamıyorum) ...
    kurmamıştım ama onunla olabiliyor diye hatırlıyorum bi araştır istersen...
    Bu aşagıdaki class ile büyük sayıları toplayıp çıkarabilirsin, belki az da olsa işini görür...
     class BigToplam {
         private $numbers = array();
         private $afterPoint = array();
         private $afterPointLength = 0;
         private $result = 0;
         public function __construct() { }
         public function addNumber ($number) {
             $this->numbers[] = (string)$number;
         }
         private function doAdd ($n1, $n2) {
             if ($n1 == 0) return $n2;
             if ($n2 == 0) return $n1;
             if (strlen($n1) <=13 && strlen($n2) <= 13) {
                 return (string)$n1+$n2;
             }
             $finalNumber = array();
             $c = 0;
             $n1 = (string)$n1;
             $n2 = (string)$n2;
             $m = max(strlen($n1), strlen($n2));
             $n1 = str_pad($n1, $m, " ", STR_PAD_LEFT);
             $n2 = str_pad($n2, $m, " ", STR_PAD_LEFT);
             $numbers1 = chunk_split($n1, 13, ";");
             $numbers1 = substr($numbers1, 0, -1);
             $numbers1 = explode(";", $numbers1);
             $numbers1 = array_reverse($numbers1);
             $numbers2 = chunk_split($n2, 13, ";");
             $numbers2 = substr($numbers2, 0, -1);
             $numbers2 = explode(";", $numbers2);
             $numbers2 = array_reverse($numbers2);
             $maxSize = max(count($numbers1), count($numbers2));
             for ($i=0;$i<$maxSize;$i++) {
                 $totalZeros  = 0;
                 $totalZeros1 = 0;
                 $totalZeros2 = 0;
                 for ($j=0;$j<strlen($numbers1[$i]);$j++) {
                     if ($numbers1[$i][$j] == 0) {
                         $totalZeros1++;
                     } else {
                         break;
                     }
                 }
                 for ($j=0;$j<strlen($numbers1[$i]);$j++) {
                     if ($numbers2[$i][$j] == 0) {
                         $totalZeros2++;
                     } else {
                         break;
                     }
                 }
                 $totalZeros = max($totalZeros1, $totalZeros2);
                 $partialResult = (string)($numbers1[$i] + $numbers2[$i] + $c);
                 $partialResult = str_pad($partialResult, strlen($partialResult)+$totalZeros, "0", STR_PAD_LEFT);
                 if (strlen($partialResult) > max(strlen($numbers1[$i]),strlen($numbers2[$i]))) {
                     $partialResult = (string)$partialResult;
                     $c = $partialResult[0];
                     $finalNumber[] = substr($partialResult, 1);
                 } else {
                     $c=0;
                     $finalNumber[] = $partialResult;
                 }
             }
             $finalNumber = array_reverse($finalNumber);
             $finalNumber = implode("", $finalNumber);
             if ($c != 0) $finalNumber = $c.$finalNumber;
             return $finalNumber;
         }
         public function calc () {
             for ($i=0; $i<count($this->numbers);$i++) {
                 $n = explode(".", $this->numbers[$i]);
                 if (count($n) == 1) {
                     $this->result = $this->doAdd($this->result, $this->numbers[$i]);
                 } elseif (count($n) == 2) {
                     $this->afterPoint[] = $n[1];
                     $this->afterPointLength = max($this->afterPointLength, strlen($n[1]));
                     $this->result = $this->doAdd($this->result, $n[0]);
                 } else {
                     trigger_error("<b>".$this->numbers[$i]."</b> is invalid !!", E_USER_ERROR);
                 }
             }
             if ($this->afterPointLength > 0) {
                 $r = 0;
                 foreach ($this->afterPoint as $number) {
                     $number = str_pad($number, $this->afterPointLength, "0", STR_PAD_RIGHT);
                     $r = $this->doAdd($r, $number);
                 }
                 if (strlen($r) > $this->afterPointLength) {
                     $this->result = $this->doAdd($this->result, substr($r, 0, -$this->afterPointLength));
                     if (strrpos($r, "0") != strlen($r)-1)
                         $this->result = $this->result.".".substr($r, 1);
                 } else {
                     $this->result = $this->result.".".$r;
                 }
             }
             return $this->result;
         }
     }
     //kullanimi
     $calc = new BigToplam();
    $sayi  = "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
     $calc->addNumber($sayi); 
     $calc->addNumber($sayi);
     $sonuc = $calc->calc();
     echo $sonuc;
     print "Sonuc ".strlen($sonuc)." basamaklidir. ";
    //$calc->addNumber($sayi1);
    //$calc->addNumber($sayi2);
    //$calc->addNumber($sayi3);
    //$calc->addNumber($sayi4);
      //$sonuc = $calc->calc();
    çıktısı
    200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    Sonuc 426 basamaklidir.
    phpclasses daki classları inceledin mi bilmiyorum ama,
    belki aralarında vardır çarpma/bölme işlemini yapan vardır.
    big number calculations php
    kolay gelsin...
    çarpma / bölme olayını aşarsan eğer , kodları paylaşırsan sevinirim. ....
  • 03-02-2009, 19:18:59
    #11
    Üyeliği durduruldu
    saolasın bir inceleyim ama dostum şunu diyeyim. bu fuction class ları okudum değerli iş yapıyor. yani işte sayı 50 basamaktan düşükse şunu yap. büyükse bunu yap ve 300 dende kucukse gibisinden. işime yarıyabilecek bir yazılım tabikide bunu php için yartılıcaga döküp uyarlamak gerekebilir biraz inceleyim işin içinden senin yerine ben kalkabilisem 75 için sana dönerim. ve öncelikle şunu belirtiyorum.

    özelden verilen cevapları burayı yazınız. parayı alan kişi buradan biri olacagı için herkes görsün kodu aldı kaçtı gitti gibi laflar duymaktan birazcık bıktım.
  • 03-02-2009, 19:20:57
    #12
    mow
    Üyeliği durduruldu
    class ile uğraşmana gerek yok "bcmath" ile yapılabilir.

    bcadd($a,$b); // a+b
  • 03-02-2009, 19:26:48
    #13
    Üyeliği durduruldu
    now dostum cok saolasın evet işlem oldu. peki bunların çıkarma, bölme ve çarpma için aynı şekilde fonksiyonları nedir ?
  • 03-02-2009, 19:31:22
    #14
    kocaxx adlı üyeden alıntı: mesajı görüntüle
    now dostum cok saolasın evet işlem oldu. peki bunların çıkarma, bölme ve çarpma için aynı şekilde fonksiyonları nedir ?
    PHP: BC Math Functions - Manual
  • 03-02-2009, 19:31:52
    #15
    Üyeliği durduruldu
    bccomp (bölme) , bcdiv (çıkarma)

    peki çarpma hangisi galiba bunlarda diğerleri ?
  • 03-02-2009, 19:34:13
    #16
    bcmul($a,$b);
  • 03-02-2009, 19:35:05
    #17
    Üyeliği durduruldu
    • bcadd — Add two arbitrary precision numbers
    • bccomp — Compare two arbitrary precision numbers
    • bcdiv — Divide two arbitrary precision numbers
    • bcmod — Get modulus of an arbitrary precision number
    • bcmul — Multiply two arbitrary precision number
    • bcpow — Raise an arbitrary precision number to another
    • bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus
    • bcscale — Set default scale parameter for all bc math functions
    • bcsqrt — Get the square root of an arbitrary precision number
    • bcsub — Subtract one arbitrary precision number from another
    now dostum şimdi sen ilk adımla toplamadan dolayı kazandın. sende diğer sağlayıcılarını eğer onun üzerinden değil kendi düşüncemle buldum diyorsan sanada yatırayım. yada aranızda anlaşın 40 , 40 ikinizede 40 ar yani yatırabilirim. hesaplarınızı özele mesaj atarsanız garanti varsa hemen hallederim. yok now alsın ben o dedikten sonra adres yolladım diyorsan ona 75 atarım. aranızdada anlaşabilirsin arada kalmayımben. ama şunlarıda bir zahmet biliyorsunuzdur türkçeye cevirirseniz sevinirim
  • 03-02-2009, 19:52:36
    #18
    mow
    Üyeliği durduruldu
    Sırasıyla:

    - toplama
    - karşılaştırma
    - bölme
    - yüzde alma
    - çarpma
    - üssünü alma
    - üssünü alıp yüzdesini alma
    - kaç tane ondalık basamak olacağını belirtme
    - karekök alma
    - çıkarma