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)
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?
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.
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.
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.
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.
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.
Bu mesaja 2 cevap geldi. Cevapları Gizle
< Bu ileti tablet sürüm kullanılarak atıldı >
Şu bağlantıda Boost kütüphanesine ait cpp_int'i kullanabilirsin. Herhangi bir sınırı 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?
http://s5.dosya.tc/server3/hhbvvn/big.rar.html
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. Cevapları Gizle
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. Cevapları Gizle
ö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.
< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 15 Kasım 2016; 9:45:48 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @beyinsis
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. Cevapları Gizle
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. Cevapları Gizle
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. Cevapları Gizle
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. Cevapları Gizle
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.