Forum: Ders Arası RSS
opCmp'ta çıkartma işlemi hatalı olabilir
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: opCmp'ta çıkartma işlemi hatalı olabilir
opCmp'ın eksi, sıfır, veya artı bir değer döndürmesi gerekir. Bunu tamsayı üyeler ile sağlamanın en kolay yolu da o üyelerin değerlerini basit bir çıkartma işleminde kullanmaktır. Bu yöntemden ben de şu bölümde yararlanmıştım:

  http://ddili.org/ders/d/islec_yukleme.html

Soldaki nesnenin üyesinden sağdaki nesnenin üyesi çıkartılır:
    int opCmp(const ref GününSaati sağdaki) const
    {
        return (saat == sağdaki.saat
                ? dakika - sağdaki.dakika
                : saat - sağdaki.saat);
    }

Bunun bazen yanlış sonuç doğurabileceğini aşağıdaki forum konusundan öğrendim:

  http://forum.dlang.org/thread/rxeffcryouqzsakclmxp@forum.d…

Tamsayı taşması nedeniyle int.min değerli nesne int.max değerli nesneden daha büyük çıkıyor.

O yüzden en iyisi eğer küçük ise vs. biçiminde açıkça kodlamakmış. Forum konusundaki kodda küçük olma durumunu özel olarak kodlarsak aşağıdaki işlev doğru işler:
    int opCmp(S sağdaki)
    {
        if (i < sağdaki.i) {
            return -1;
        }
 
        return i - sağdaki.i;
    }
Ali

Not: Eğer yukarıdaki saat değerlerinde olduğu gibi, üyelerin değerlerini hiçbir zaman int.min veya int.max gibi uç değerler olmadıkları garantilenirse çıkartma işlemi yine de kullanılabilir.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-23, 23:20:54 (UTC -08:00)