Pi Sayısı Hesabı :?:

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Pi Sayısı Hesabı :?:

Mesaj gönderen qamyoncu »

Merhabalar..

Bilindiği gibi:
Extended:10 Byte'lık ondalık sayı tipidir. 3.4 x 10^(-4932) ile 1.1 x 10^4932 arasında değer alabilir.
Ve sanırım ki daha geniş aralıklı bir sayı tipi yok.

Ancak, ben örneğin 'pi' sayısının 1M. basamağını hesaplamak istiyorum projem ile. Elimde pi sayısının 1m basamağı var. Ancak her 10 basamakta 1 boşluk var arasında. Boşluklardan dolayı int64'e atayamıyorum. Boşlukları silmek için kod yazmaya çalıştığımda bu sefer for-do döngüsü içine 1m'ye kadar uzanacak bir değişken kullanamıyorum. Kısacası kafam karışmış durumda :? Nasıl bir yol izlemeliyim? Yeni bir sayı tipimi yaratmalıyım. Bunu nasıl yapabilirim? Yardım bekliyorum..
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Pi Sayısı Hesabı :?:

Mesaj gönderen conari »

Olurmu bilmem ama;Copy pos ile parçala ondan sonra değiştir ondan sonra birleştir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Pi Sayısı Hesabı :?:

Mesaj gönderen qamyoncu »

Hocam teşekkürler..

Ancak; parçalamak için örneğin bir memo nesnesi içine atıyorum tüm satırları, fakat döngüyü kurmak için kullancağım değişkenin boyutu memonun satırları kadar olamıyor. Hata veriyor. :) for - do döngüsü ile denedim. int64 kullanmamada izin vermiyor nalet şey.. :x

İsterseniz önerinizi bir deneyiniz. Belki gözden kaçırdığım bir nokta vardır.
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Pi Sayısı Hesabı :?:

Mesaj gönderen emin_as »

1 milyon basamagı normal degişkenlerle hesaplayamazsın, kendi degişkenini yaratıp, hesaplama için de kendi rutinlerini yazmalısın.
Delphi de kullanılan (diger diller için de geçerlidir) degişkenler işlemcinin registerlarına uyan degişkenlerdir. 32 bit altında programlıyorsan, 32 bitlik işlemcinin 32 bitlik registerlarini kullanırsın. İşlemcide floating point için de özel degişkenler vardır, bunları da extended, double gibi degişkenlerle kullanırsın.

Bunun dışında işlem yapacaksan, degişken türü yaratmalısın, bu degişkenin depolanmasını, hesabını, gösterimini herşeyi kendin kodlamalısın. Delphi de operator loading işlemi yapılabiliyor, ama bildigim kadarıyla bu işlemler c++ daki kadar rahat olmuyor. Type ile özel degişkenler tanımlayıp, bunlar üzerinde yapacagın işlemlerin operatorlerini overload edebilirsin.

Nette aşagıdaki sayfayı buldum, bu sayfadan operator overloadingi inceleyebilirsin.
http://www.diyezon.com/index.php/2007/0 ... erloading/

Aşagıdaki gibi bir sınıf yaratıp, hesaplamalar yapabilirsin.

Kod: Tümünü seç


type 
  Tcokbuyuksayi = array [0..65535] of integer; 

THesap = class
  buyuksayi : Tcokbuyuksayi;
  class operator add(sayi1, sayi2 : TCokbuyuksayi);
   ....
end;  
Epey ugraştırır, ama ögrenmen konusunda da faydası olur. Bu işlerle çok ugraşacaksan, c++ bu işleri daha güzel yapar. Toplama, çarpma vs yaparken eldeleri, taşmaları taşımayı unutma. Yoksa hesapların yanlış sonuç verir.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: Pi Sayısı Hesabı :?:

Mesaj gönderen Hakan Can »

Hocam yapmak istediğin şeyi çok daha net yazabilir misin?

Öncelikle sorun diye zikrettiğin şeyler Turbo Pascal dönemine ait gibi gözüküyor.

Pi sayısının değil 1M. değerini istersen 1 katrilyonuncu değerini hesaplayabilirsin.

Int64 "for do" döngüsünde kullanılamayabilir ama "repeat until" veya while do" döngüleri ile Extended bile kullanabilirsin. İlla "for do" kullanacam dersen birden fazla içi içe "for do" döngüsü kullanırsın.

Değişken sınırlamasına yönelik de "string" veya "TStringList" kullanabilirsin. Bunlarda hiçbir sınır yok (bilgisayarın hafızası sorun çıkarmadıkça).

Veya "array of" ve "SetLength" gibi fonksiyonları falan kullanabilirsin. İlla statik değişken tanımlaman şart değil.

Aslında Pi hesaplama formülünü, ne yapmak istediğini ve sonuçta ne görmek istediğini daha bir net ifade edersen çok daha yardımcı olunabilir.

Kolay gelsin.
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Pi Sayısı Hesabı :?:

Mesaj gönderen qamyoncu »

Merhabalar..

Hazırladığım program ile, kullancıya pi sayısının istediği kadar bölümünü bir memo içerisinde göstermek istiyorum.. İnternette bazı pi sayısı hesaplayan formüller var. Ancak yeteri kadar hassas olamayacağını düşündüm(1M basamak kadar). Bu yüzden pi sayısının ilk 1M basamağını buldum(her 10 basamakta 1 boşluk olacak şekilde). Programın exe'sinin dışında bir dosya olmadan(yani program çalışırken bir txt dosyasından çağırmak istemiyorum) pi sayısını kullanıcıya göstermek istiyorum. Bir kaç yöntem denedim:
+ Bir while-do döngüsü ile elimde 1m basamağı olan pi sayısının boşluklarını attım.
+Şuan elimde 1M karakterli bir pi sayısı var. Bu sayıyı asıl projeme dahil ederken string olarak tanımladım. Daha sonra projem içinde gerekli yerlerde kullanırken hiçbir sorunla karşılaşmadım. Teşekkür ediyorum.

Ek olarak; bazı formüller var demiştim. Bu formüller ile gerekli duyarlılıkta hesabı nasıl yapabiliriz?

1- pi/4=4arctan (1/5)-arctan(1/70)+arctan(1/99)

2- pi/64=3/4 arctan (1/18)+1/2arctan (1/57)-5/16arctan(1/239)
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Cevapla