Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
1148
Tıklama
0
Öne Çıkarma
C++ büyük sayılarla işlem yapma
L
12 yıl
Yarbay
Konu Sahibi

Bununla ilgili GMP gibi kütüphaneler var biliyorum fakat benim asıl merak ettiğim mantık olarak nasıl yapabiliriz? Genel bir mantık, algoritma yada örnek kod gösterebilirseniz sevinirim. GMP'nin source codeunu inceleyecektim fakat C++'da iyi değilim komplike kodları okumam biraz zor.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



L
12 yıl
Yarbay
Konu Sahibi

4
12 yıl
Teğmen

Ilk aklıma gelen bir yapı oluşturup yapmak. Yani atıyorum içinde 3 tane int değişken olur ama siz uygun fonksiyonlarla bu 3 değişkeni tek değişken gibi yorumlayabilirsiniz.


Bu mesaja 2 cevap geldi.
L
12 yıl
Yarbay
Konu Sahibi

quote:

Orijinalden alıntı: 4kalan

Ilk aklıma gelen bir yapı oluşturup yapmak. Yani atıyorum içinde 3 tane int değişken olur ama siz uygun fonksiyonlarla bu 3 değişkeni tek değişken gibi yorumlayabilirsiniz.

mesela şöyle birşey olabilir sanırım.
string tipinde sayı alınıp basamak basamak işlemler yapılıp yeni bir stringe atılabilir. yada string uzunluğu kadar tek rakam tutan bi array yaratılıp her basamak ordaki bi eleman olup ona göre işlem yapılbilir sanırım. şimdi bunları yapmayı deneyeyim teşekkürler hocam :D şimdilik sadece toplama çıkarma yapmayı deneyeceğim :D



V
12 yıl
Onbaşı

Matematiksel olarak nasıl yapılıyorsa aynı tekniği uygulayabilirsiniz ama bu sadece deneysel olarak kullanılabilir. Normalde yoğun şekilde asm kullanılması gerekir. Mesela 64 bit toplama örneği verirsek (işlemci 32 bit olsun).

64 bitlik (doğal) değişken olmayacağı için bunu string ya da başka bir şekilde alırız. Sonra bunu sayı gösterimine çevirip 2 adet değişkene atarız. Bir değişken üst 32 biti ifade ederken diğeri alt 32 biti gösterir. Bu şekilde 2 adet 64 bitlik sayıyı 4 adet değişkene dağıttıktan sonra algoritma şöyle işler;

1- Alt 32 bitleri topla
2- Üst 32 bitleri topla
3- Taşma bitini (carry flag) 2. adımdaki sonuca ilave et.

Çoğu işlemcide taşma bitini ve değişkenleri birlikte toplayan komut bulunur. Böylece 2. ve 3. adımlar tek hamlede halledilir.

Asm kullanılmazsa sonucun taşıp taşmayacağını aritmetiksel olarak hesaplamak gerekir. Bu da işlemi onlarca kat yavaşlatır.


Bu mesaja 1 cevap geldi.
L
12 yıl
Yarbay
Konu Sahibi

quote:

Orijinalden alıntı: Vandenesse

Matematiksel olarak nasıl yapılıyorsa aynı tekniği uygulayabilirsiniz ama bu sadece deneysel olarak kullanılabilir. Normalde yoğun şekilde asm kullanılması gerekir. Mesela 64 bit toplama örneği verirsek (işlemci 32 bit olsun).

64 bitlik (doğal) değişken olmayacağı için bunu string ya da başka bir şekilde alırız. Sonra bunu sayı gösterimine çevirip 2 adet değişkene atarız. Bir değişken üst 32 biti ifade ederken diğeri alt 32 biti gösterir. Bu şekilde 2 adet 64 bitlik sayıyı 4 adet değişkene dağıttıktan sonra algoritma şöyle işler;

1- Alt 32 bitleri topla
2- Üst 32 bitleri topla
3- Taşma bitini (carry flag) 2. adımdaki sonuca ilave et.

Çoğu işlemcide taşma bitini ve değişkenleri birlikte toplayan komut bulunur. Böylece 2. ve 3. adımlar tek hamlede halledilir.

Asm kullanılmazsa sonucun taşıp taşmayacağını aritmetiksel olarak hesaplamak gerekir. Bu da işlemi onlarca kat yavaşlatır.

peki sizce c++'ta bunu yapmaya çalışmak gereksiz mi? şuan amacım öyle kullanılcak bişey değil de kendimi geliştirme amaçlı



V
12 yıl
Onbaşı

Amaç kendini geliştirmekse niye gereksiz olsun. Benzer bir konuyu şurada tartışıp örneklendirmiştik (ban yediğim için farklı isimle yazıyorum çaktırma)

http://forum.donanimhaber.com/m_73385316/tm.htm


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @GhilleintheMist
L
12 yıl
Yarbay
Konu Sahibi

quote:

Orijinalden alıntı: Vandenesse

Amaç kendini geliştirmekse niye gereksiz olsun. Benzer bir konuyu şurada tartışıp örneklendirmiştik (ban yediğim için farklı isimle yazıyorum çaktırma)

http://forum.donanimhaber.com/m_73385316/tm.htm

hocam şuan anladım baya, toplama/çıkarma/çarpma da sıkıntı yok en azında kafa da yok ama bölmeyi nasıl yaparım bilmiyorum. hani 9/3'ü 9-3-3-3 şeklinde yapıp kaç çıkarma olduğunu sayarak yapabiliriz. ama tam bölünmediği durumda küsüratı nasıl hesaplarım bilemedim.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.