Arama butonu
Bu konudaki kullanıcılar: 1 misafir
14
Cevap
735
Tıklama
0
Öne Çıkarma
90 100 basamaklı bir sayıda çarpma bölme işlemi
G
7 yıl
Çavuş
Konu Sahibi

selamun aleyküm arkadaşlar, C+'da veya herhangi çalışan bir programda (hazır kütüphane, exe dosyası, vs.) 90 100 basamaklı bir sayıyı bölebilecek bir program var mı ya da bu basamakta bir sayıyı nasıl tanımlayabiliriz (c+'da veya başka programda)



G
7 yıl
Yarbay

Python kur. İster script yazarsın, ister hesap makinesi olarak kullanırsın. Pythonda sayıların limiti yok.


Bu mesaja 2 cevap geldi.
M
7 yıl
Yarbay

Java biliyorsan BigDecimal ile halledersin. Ekstra bir library kullanmana gerek yok, core Java ile geliyor.



< Bu ileti tablet sürüm kullanılarak atıldı >

P
7 yıl
Çavuş

Aleyküm Selam;
Şu bağlantıda Boost kütüphanesine ait cpp_int'i kullanabilirsin. Herhangi bir sınırı yok.



G
7 yıl
Çavuş
Konu Sahibi

quote:

Orijinalden alıntı: elektro_gadget

Python kur. İster script yazarsın, ister hesap makinesi olarak kullanırsın. Pythonda sayıların limiti yok.

kardeşim dediğin programda denedim şimdi ama bana 1.94772312321312e+92 gibi bir sonuç verdi. normalde tam bölünebilen bir sayı. bu çıkan sonucun açık hali nedir acaba?



G
7 yıl
Yarbay

debug bin klasörüne bakarsın

http://s5.dosya.tc/server3/hhbvvn/big.rar.html



B
7 yıl
Yarbay

quote:

Orijinalden alıntı: elektro_gadget

Python kur. İster script yazarsın, ister hesap makinesi olarak kullanırsın. Pythonda sayıların limiti yok.

Olur mu öyle şey. O dediğin stringde olur (onun dahi bir sınırı vardır teoride).



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
G
7 yıl
Yarbay

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: elektro_gadget

Python kur. İster script yazarsın, ister hesap makinesi olarak kullanırsın. Pythonda sayıların limiti yok.

Olur mu öyle şey. O dediğin stringde olur (onun dahi bir sınırı vardır teoride).

Float için hassasiyet nedir bilmiyorum ama tamsayılar için limit bellek limiti. Örneğin;

a = 999
b = 999
a**b
yazarsan karşına çooook uzun bir sayı gelecektir.


Bu mesaja 1 cevap geldi.
B
7 yıl
Yarbay

quote:

Orijinalden alıntı: elektro_gadget


quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: elektro_gadget

Python kur. İster script yazarsın, ister hesap makinesi olarak kullanırsın. Pythonda sayıların limiti yok.

Olur mu öyle şey. O dediğin stringde olur (onun dahi bir sınırı vardır teoride).

Float için hassasiyet nedir bilmiyorum ama tamsayılar için limit bellek limiti. Örneğin;

a = 999
b = 999
a**b
yazarsan karşına çooook uzun bir sayı gelecektir.

örneğin pek olmamış. öyle çoook uzun bir rakam değil.

neyse, hepsi için sınır var:

https://en.wikipedia.org/wiki/Integer_overflow

int64 için sınır: 18,446,744,073,709,551,615

int128: 340,282,366,920,938,463,463,374,607,431,768,211,455

int128'i Windows altında sınırlı dillerle sınırlı bir şekilde kullanabilirsin. gerçek manada kullanamazsın.



G
7 yıl
Yarbay

< Resime gitmek için tıklayın >





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 15 Kasım 2016; 9:45:48 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @beyinsis
B
7 yıl
Yarbay

quote:

Orijinalden alıntı: elektro_gadget

< Resime gitmek için tıklayın >

ben **'yı * olarak görmüşüm, pardon. pyton bunu normal yolla yapıyor olamaz. windows bir çok işletim sistemi gibi 64 bit'ten yukarısını desteklemiyor. bir takım ek hesaplamalarla filan yapar ve ona göre de yavaşlar. neyse, zaten gerçek hayatta böyle rakamlarla işimiz yok. bilimsel araştırma falan yapan yoktur heralde burda.


Bu mesaja 1 cevap geldi.
K
7 yıl
Yarbay

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: elektro_gadget

< Resime gitmek için tıklayın >

ben **'yı * olarak görmüşüm, pardon. pyton bunu normal yolla yapıyor olamaz. windows bir çok işletim sistemi gibi 64 bit'ten yukarısını desteklemiyor. bir takım ek hesaplamalarla filan yapar ve ona göre de yavaşlar. neyse, zaten gerçek hayatta böyle rakamlarla işimiz yok. bilimsel araştırma falan yapan yoktur heralde burda.

Python dynamic tip ataması yapan bir dil olduğundan kendi kendiliğinden destekli geliyor (gelmese program havaya uçabilir). Üst limit de sistemde tanımlı hafıza miktarı.

a = 99*99 dersen a'nın tipi otomatikman int32 (veya sisteme göre int64) olarak atanıyor. Genelde en optimal çözümü buluyor yorumlayıcı.

a = 999 ** 999 dersen yine en optimal çözümü bulmaya çalışıyor. Klasik int tipine sığmayacağını anlayınca farklı bir hesaplama konumuna geçip hesaplayıp a'nın tipini de ona göre ayarlıyor. Über büyük sayıları kullanırken yavaşlama oluyor yani (python'ın yorumlayıcı kaynaklı yavaşlığı hariç)

Ki zaten bildiğim kadarıyla bu kadar büyük sayıları RAM'de genelde tek parça int halinde tutmuyorsunuz. Dolayısıyla işlemciye aynı anda 64 bit gönderme limitini de aşabiliyorsunuz. 10 tane int64 değişkeni yan yana sıralayıp işlemleri içeride değişik tarzda hallediyor. Belki stringe çevirip öyle yapıyordur bilmiyorum. Terminali açıp hiçbir şey import etmeden yazdım şu anda çıktı şöyle:

>>> a = 999 ** 999
>>> type(a)
<class 'int'>
>>> a
...sayının tamamı...

sayısal tamsayı değerlerin hepsine int diyor nedense.

Matematiksel hesaplamaları python ile işletmek için python seçen biri varsa () onun için de c_types modülü var. int a = ... şeklinde C tipi atamalara izin veriyor. Alternatik olarak yine C ile yazılıp python'a port edilen numpy var. Tek işlem için 0.0001 saniyeden 0.001 saniyeye artış olması genelde pek bir şey farkettirmiyor. Ediyorsa acilen numpy'a geçmeli.





< Bu mesaj bu kişi tarafından değiştirildi KaramazovX -- 16 Kasım 2016; 2:53:23 >
Bu mesaja 1 cevap geldi.
B
7 yıl
Yarbay

quote:

Orijinalden alıntı: Fulctrum

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: elektro_gadget

< Resime gitmek için tıklayın >

ben **'yı * olarak görmüşüm, pardon. pyton bunu normal yolla yapıyor olamaz. windows bir çok işletim sistemi gibi 64 bit'ten yukarısını desteklemiyor. bir takım ek hesaplamalarla filan yapar ve ona göre de yavaşlar. neyse, zaten gerçek hayatta böyle rakamlarla işimiz yok. bilimsel araştırma falan yapan yoktur heralde burda.

Python dynamic tip ataması yapan bir dil olduğundan kendi kendiliğinden destekli geliyor (gelmese program havaya uçabilir). Üst limit de sistemde tanımlı hafıza miktarı.

a = 99*99 dersen a'nın tipi otomatikman int32 (veya sisteme göre int64) olarak atanıyor. Genelde en optimal çözümü buluyor yorumlayıcı.

a = 999 ** 999 dersen yine en optimal çözümü bulmaya çalışıyor. Klasik int tipine sığmayacağını anlayınca farklı bir hesaplama konumuna geçip hesaplayıp a'nın tipini de ona göre ayarlıyor. Über büyük sayıları kullanırken yavaşlama oluyor yani (python'ın yorumlayıcı kaynaklı yavaşlığı hariç)

Ki zaten bildiğim kadarıyla bu kadar büyük sayıları RAM'de genelde tek parça int halinde tutmuyorsunuz. Dolayısıyla işlemciye aynı anda 64 bit gönderme limitini de aşabiliyorsunuz. 10 tane int64 değişkeni yan yana sıralayıp işlemleri içeride değişik tarzda hallediyor. Belki stringe çevirip öyle yapıyordur bilmiyorum. Terminali açıp hiçbir şey import etmeden yazdım şu anda çıktı şöyle:

>>> a = 999 ** 999
>>> type(a)
<class 'int'>
>>> a
...sayının tamamı...

sayısal tamsayı değerlerin hepsine int diyor nedense.

Matematiksel hesaplamaları python ile işletmek için python seçen biri varsa () onun için de c_types modülü var. int a = ... şeklinde C tipi atamalara izin veriyor. Alternatik olarak yine C ile yazılıp python'a port edilen numpy var. Tek işlem için 0.0001 saniyeden 0.001 saniyeye artış olması genelde pek bir şey farkettirmiyor. Ediyorsa acilen numpy'a geçmeli.

bunun dinamik değişken tanımlamayla ilgisi yok. Aynı pyton gibi weak type olan vfp'de 32 bitten yukarı değişken kullanamazsın mesela. dediğim gibi 64 bit yukarısı işlemleri normal olarak yapamaz pyton da. onun için bir takım kodlar yazmışlardır. o yüzden yavaşlıyordur.


Bu mesaja 1 cevap geldi.
G
7 yıl
Yarbay

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: Fulctrum

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: elektro_gadget

< Resime gitmek için tıklayın >

ben **'yı * olarak görmüşüm, pardon. pyton bunu normal yolla yapıyor olamaz. windows bir çok işletim sistemi gibi 64 bit'ten yukarısını desteklemiyor. bir takım ek hesaplamalarla filan yapar ve ona göre de yavaşlar. neyse, zaten gerçek hayatta böyle rakamlarla işimiz yok. bilimsel araştırma falan yapan yoktur heralde burda.

Python dynamic tip ataması yapan bir dil olduğundan kendi kendiliğinden destekli geliyor (gelmese program havaya uçabilir). Üst limit de sistemde tanımlı hafıza miktarı.

a = 99*99 dersen a'nın tipi otomatikman int32 (veya sisteme göre int64) olarak atanıyor. Genelde en optimal çözümü buluyor yorumlayıcı.

a = 999 ** 999 dersen yine en optimal çözümü bulmaya çalışıyor. Klasik int tipine sığmayacağını anlayınca farklı bir hesaplama konumuna geçip hesaplayıp a'nın tipini de ona göre ayarlıyor. Über büyük sayıları kullanırken yavaşlama oluyor yani (python'ın yorumlayıcı kaynaklı yavaşlığı hariç)

Ki zaten bildiğim kadarıyla bu kadar büyük sayıları RAM'de genelde tek parça int halinde tutmuyorsunuz. Dolayısıyla işlemciye aynı anda 64 bit gönderme limitini de aşabiliyorsunuz. 10 tane int64 değişkeni yan yana sıralayıp işlemleri içeride değişik tarzda hallediyor. Belki stringe çevirip öyle yapıyordur bilmiyorum. Terminali açıp hiçbir şey import etmeden yazdım şu anda çıktı şöyle:

>>> a = 999 ** 999
>>> type(a)
<class 'int'>
>>> a
...sayının tamamı...

sayısal tamsayı değerlerin hepsine int diyor nedense.

Matematiksel hesaplamaları python ile işletmek için python seçen biri varsa () onun için de c_types modülü var. int a = ... şeklinde C tipi atamalara izin veriyor. Alternatik olarak yine C ile yazılıp python'a port edilen numpy var. Tek işlem için 0.0001 saniyeden 0.001 saniyeye artış olması genelde pek bir şey farkettirmiyor. Ediyorsa acilen numpy'a geçmeli.

bunun dinamik değişken tanımlamayla ilgisi yok. Aynı pyton gibi weak type olan vfp'de 32 bitten yukarı değişken kullanamazsın mesela. dediğim gibi 64 bit yukarısı işlemleri normal olarak yapamaz pyton da. onun için bir takım kodlar yazmışlardır. o yüzden yavaşlıyordur.

Dille ya da işletim sistemiyle alakası yok. Tamamen kodu yürüten donanımla alakalı ki bu genelde işlemci oluyor. İşlemcinin register uzunluğu neyse tek seferde yapabileceği işlem odur. Daha uzun sayılar için arka arkaya tekrarlamak gerekli.

Toplama ve çıkarma çok basit. Kaç tane 8 byte varsa bunları carry flagla beraber peşpeşe toplarsın ya da çıkarırsın. İşlemci carry flag tutmasaydı bu işlemler mümkün olamazdı. Çarpmanın ise belli bir algoritması var. En sıkıntılı olan bölme, sanırım arkaya arkaya çıkarma yapmaktan başka çare yok.

Sonuç olarak python ile de yapsanız, c++ ile de yapsanız, asm ile de yapsanız aynı şekilde yapılacak. Yukarıda string aritmetik bahsi geçmiş ama feci şekilde yavaş olacağı için pratikte hiçbir işe yaramaz.





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 16 Kasım 2016; 9:24:30 >
Bu mesaja 1 cevap geldi.
B
7 yıl
Yarbay

quote:

Orijinalden alıntı: elektro_gadget

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: Fulctrum

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: elektro_gadget

< Resime gitmek için tıklayın >

ben **'yı * olarak görmüşüm, pardon. pyton bunu normal yolla yapıyor olamaz. windows bir çok işletim sistemi gibi 64 bit'ten yukarısını desteklemiyor. bir takım ek hesaplamalarla filan yapar ve ona göre de yavaşlar. neyse, zaten gerçek hayatta böyle rakamlarla işimiz yok. bilimsel araştırma falan yapan yoktur heralde burda.

Python dynamic tip ataması yapan bir dil olduğundan kendi kendiliğinden destekli geliyor (gelmese program havaya uçabilir). Üst limit de sistemde tanımlı hafıza miktarı.

a = 99*99 dersen a'nın tipi otomatikman int32 (veya sisteme göre int64) olarak atanıyor. Genelde en optimal çözümü buluyor yorumlayıcı.

a = 999 ** 999 dersen yine en optimal çözümü bulmaya çalışıyor. Klasik int tipine sığmayacağını anlayınca farklı bir hesaplama konumuna geçip hesaplayıp a'nın tipini de ona göre ayarlıyor. Über büyük sayıları kullanırken yavaşlama oluyor yani (python'ın yorumlayıcı kaynaklı yavaşlığı hariç)

Ki zaten bildiğim kadarıyla bu kadar büyük sayıları RAM'de genelde tek parça int halinde tutmuyorsunuz. Dolayısıyla işlemciye aynı anda 64 bit gönderme limitini de aşabiliyorsunuz. 10 tane int64 değişkeni yan yana sıralayıp işlemleri içeride değişik tarzda hallediyor. Belki stringe çevirip öyle yapıyordur bilmiyorum. Terminali açıp hiçbir şey import etmeden yazdım şu anda çıktı şöyle:

>>> a = 999 ** 999
>>> type(a)
<class 'int'>
>>> a
...sayının tamamı...

sayısal tamsayı değerlerin hepsine int diyor nedense.

Matematiksel hesaplamaları python ile işletmek için python seçen biri varsa () onun için de c_types modülü var. int a = ... şeklinde C tipi atamalara izin veriyor. Alternatik olarak yine C ile yazılıp python'a port edilen numpy var. Tek işlem için 0.0001 saniyeden 0.001 saniyeye artış olması genelde pek bir şey farkettirmiyor. Ediyorsa acilen numpy'a geçmeli.

bunun dinamik değişken tanımlamayla ilgisi yok. Aynı pyton gibi weak type olan vfp'de 32 bitten yukarı değişken kullanamazsın mesela. dediğim gibi 64 bit yukarısı işlemleri normal olarak yapamaz pyton da. onun için bir takım kodlar yazmışlardır. o yüzden yavaşlıyordur.

Dille ya da işletim sistemiyle alakası yok. Tamamen kodu yürüten donanımla alakalı ki bu genelde işlemci oluyor. İşlemcinin register uzunluğu neyse tek seferde yapabileceği işlem odur. Daha uzun sayılar için arka arkaya tekrarlamak gerekli.

Toplama ve çıkarma çok basit. Kaç tane 8 byte varsa bunları carry flagla beraber peşpeşe toplarsın ya da çıkarırsın. İşlemci carry flag tutmasaydı bu işlemler mümkün olamazdı. Çarpmanın ise belli bir algoritması var. En sıkıntılı olan bölme, sanırım arkaya arkaya çıkarma yapmaktan başka çare yok.

Sonuç olarak python ile de yapsanız, c++ ile de yapsanız, asm ile de yapsanız aynı şekilde yapılacak. Yukarıda string aritmetik bahsi geçmiş ama feci şekilde yavaş olacağı için pratikte hiçbir işe yaramaz.

tartışmayı gereksiz yere uzatmak istemiyorum ama dille de işletim sistemiyle de alakası var. işletim sistemin de cpu'n da 64 bit dahi olsa Visual Foxpro ile 32 bit üzerinde işlem yapamazsın. zira VFP 32 bit destekler sadece.

pyton'un 64 bitten yukarısı için yaptığı pratikte pyton için bile çok fazla işe yaracak birşey değil. tablolar vs... bir çok yerde int64 sınırlayıcıdır. pyton'un özel bir library sayesinde daha büyük işlemleri yapabiliyor olması birşeyi değiştirmez.



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.