Şimdi Ara

C++ büyük sayılarla işlem yapma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
1.148
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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.



  • up
  • 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.
  • 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
  • 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.




  • 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ı




  • 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
  • Yapay Zeka’dan İlgili Konular
    C++ Basit Bir Soru
    12 yıl önce açıldı
    Daha Fazla Göster
  • 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.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.