folder Tahribat.com Forumları
linefolder C - C++
linefolder ANSI C Standartları ?



ANSI C Standartları ?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    int türünün boyutları standartlarda implementation-defined şeklinde geçer. Yani minimum sınırları verilmiş ancak boyutu derleyici yazanlara bırakılmıştır. 

    Standartlarda, kodun derlendiği mimarinin önerdiği boyutlarda olması tavsiye edilir, mesela 16 bit işlemcilerde int boyutu 16 bit, 32 bitlerde 32 bit olmuştur. Ancak hem visual C++ da hem gcc de 64 derleyicilerde int 64 bit olmamış, 32 kalmıştır (sanırım long long int C99 ile standartlara eklendigi için). Ancak yine de A firması çıkıp 64 bit int size ı olan bir derleyici çıkarabilir ve bu derleyici standartlara uygun sayılır.

    Ayrıca standartlarda int boyutunun limits.h daki INT_MIN ve INT_MAX arasında olacağı garanti altına alınmıştır. Yine de sen kendin çalışma zamanında bulmak istersen (ki hiç bir amacı yoktur) (int)pow(2,sizeof(int)*8 -1) ifadesini kullanabilirsin.

    Standartın tam metnini ansi veya iso nun sitesinden satın alabiliyorsun, ancak free de bulabilirsin. 

    C11 yani ISO/IEC 9899:2011 için link http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

    C99 yani ISO/IEC 9899:1999 için link http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    uLtRaLoVeR
    uLtRaLoVeR's avatar
    Kayıt Tarihi: 25/Haziran/2007
    Erkek

    Tugberk bunu yazdı:
    -----------------------------

    int türünün boyutları standartlarda implementation-defined şeklinde geçer. Yani minimum sınırları verilmiş ancak boyutu derleyici yazanlara bırakılmıştır. 

    Standartlarda, kodun derlendiği mimarinin önerdiği boyutlarda olması tavsiye edilir, mesela 16 bit işlemcilerde int boyutu 16 bit, 32 bitlerde 32 bit olmuştur. Ancak hem visual C++ da hem gcc de 64 derleyicilerde int 64 bit olmamış, 32 kalmıştır (sanırım long long int C99 ile standartlara eklendigi için). Ancak yine de A firması çıkıp 64 bit int size ı olan bir derleyici çıkarabilir ve bu derleyici standartlara uygun sayılır.

    Ayrıca standartlarda int boyutunun limits.h daki INT_MIN ve INT_MAX arasında olacağı garanti altına alınmıştır. Yine de sen kendin çalışma zamanında bulmak istersen (ki hiç bir amacı yoktur) (int)pow(2,sizeof(int)*8 -1) ifadesini kullanabilirsin.

    Standartın tam metnini ansi veya iso nun sitesinden satın alabiliyorsun, ancak free de bulabilirsin. 

    C11 yani ISO/IEC 9899:2011 için link http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

    C99 yani ISO/IEC 9899:1999 için link http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

     


    -----------------------------

    Hocam bilgi için çok teşekkürler.

    limits.h'taki INT_MAX 32 bit'in maximum değerini veriyor (2^31)-1 ben bunu sonsuz olarak kullanmak istiyorum dijkstra shortest path algoritmasında fakat ödevin değerlendirilmesi farklı bir makinede yapılıp bu değerden daha büyük bir weight verirler diye korkuyorum. Açıklamada int'a sığacak yazıyor sadece.

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    uLtRaLoVeR bunu yazdı:
    -----------------------------

    Hocam bilgi için çok teşekkürler.

    limits.h'taki INT_MAX 32 bit'in maximum değerini veriyor (2^31)-1 ben bunu sonsuz olarak kullanmak istiyorum dijkstra shortest path algoritmasında fakat ödevin değerlendirilmesi farklı bir makinede yapılıp bu değerden daha büyük bir weight verirler diye korkuyorum. Açıklamada int'a sığacak yazıyor sadece.


    -----------------------------

    Sonsuzu unut birkere, evrendeki atom sayısı bile sonlu iken, sonsuz sayı alan bir değişken ne teoride ne pratikte mümkündür. Yeterince büyükten bahsedilebilir. Birkere tüm sistemlerde int in 32 bit olduğunu söyledik linux windows x86 x64 farketmez. Platform tamamen farklı bile olsa, sizeof kullanarak derlenen kod taşınabilir olur.

    Eğer int çok küçük geliyor diyorsan, unsigned long long int kullan, 64 bit işaretsiz, max 18446744073709551615 alabilir, 18 kentilyon, bu weight i algoritmaya verirsen çözüm süresi evrenin yaşından çok daha fazla olacaktır. 

    Yani yanlış noktayı kafaya takıyorsun, sen yazdığın algoritmanın güvenliğini kalitesini filan düşün int in sınırına takılma bence.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    uLtRaLoVeR
    uLtRaLoVeR's avatar
    Kayıt Tarihi: 25/Haziran/2007
    Erkek

    Tugberk bunu yazdı:

    -----------------------------

    Sonsuzu unut birkere, evrendeki atom sayısı bile sonlu iken, sonsuz sayı alan bir değişken ne teoride ne pratikte mümkündür. Yeterince büyükten bahsedilebilir. Birkere tüm sistemlerde int in 32 bit olduğunu söyledik linux windows x86 x64 farketmez. Platform tamamen farklı bile olsa, sizeof kullanarak derlenen kod taşınabilir olur.

    Eğer int çok küçük geliyor diyorsan, unsigned long long int kullan, 64 bit işaretsiz, max 18446744073709551615 alabilir, 18 kentilyon, bu weight i algoritmaya verirsen çözüm süresi evrenin yaşından çok daha fazla olacaktır. 

    Yani yanlış noktayı kafaya takıyorsun, sen yazdığın algoritmanın güvenliğini kalitesini filan düşün int in sınırına takılma bence.


    -----------------------------

    Verilecek sayı integer'a sığacak deniliyorsa sonsuz dediğimiz şey integer'a sığan maksimum sayıdır diye düşündüm dolayısıyla initial maliyet olarak onu verip daha sonra güncelleyerek en kısasını bulmaya çalışıyorum. Ama eğer her platformda 32 bit ise her zaman (2^31)-1 olur zaten problem yaşamam.

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    uLtRaLoVeR bunu yazdı:
    -----------------------------

    Tugberk bunu yazdı:

    -----------------------------

    Sonsuzu unut birkere, evrendeki atom sayısı bile sonlu iken, sonsuz sayı alan bir değişken ne teoride ne pratikte mümkündür. Yeterince büyükten bahsedilebilir. Birkere tüm sistemlerde int in 32 bit olduğunu söyledik linux windows x86 x64 farketmez. Platform tamamen farklı bile olsa, sizeof kullanarak derlenen kod taşınabilir olur.

    Eğer int çok küçük geliyor diyorsan, unsigned long long int kullan, 64 bit işaretsiz, max 18446744073709551615 alabilir, 18 kentilyon, bu weight i algoritmaya verirsen çözüm süresi evrenin yaşından çok daha fazla olacaktır. 

    Yani yanlış noktayı kafaya takıyorsun, sen yazdığın algoritmanın güvenliğini kalitesini filan düşün int in sınırına takılma bence.


    -----------------------------

    Verilecek sayı integer'a sığacak deniliyorsa sonsuz dediğimiz şey integer'a sığan maksimum sayıdır diye düşündüm dolayısıyla initial maliyet olarak onu verip daha sonra güncelleyerek en kısasını bulmaya çalışıyorum. Ama eğer her platformda 32 bit ise her zaman (2^31)-1 olur zaten problem yaşamam.


    -----------------------------

    Hocam tuğberk yukarıda belirtmiş öncesinde ben de söyledim. Makineden makineye değişse bile max int değerini (int)pow(2,sizeof(int)*8 -1) ile bulabilirsin. Ayrıca o kadar büyük bi graf vermek saçmalık olur, dijkstra ile çözülmesi günleri bulabilir :|

     

    There are 10 types of people in the world. Those who knows binary and those who dont...
Toplam Hit: 1983 Toplam Mesaj: 16