Fazlamesai Fazlamesai.net · Kare · Galaksi
    Haber Yolla Hesabınız İletişim SSS İstatistik Arama Konular

BinarySearch ve MergeSort kullandıysanız kodunuzu kontrol edin!
FZ, Pazartesi, 5 Haziran 2006 (15:13 TSI) (5566 okuma)
Algoritmalar mükemmel olabilir ama uygulamaları her zaman öyle olmayabiliyor!

Google'dan Joshua Bloch, yeni günlük girdilerinden birinde Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are Broken diye konuya girip Java standart kütüphanesinde kendi yazdığı BinarySearch fonksiyonunun nasıl bir hata barındırdığını anlatıyor.

Sun Microsystems'e 11 Mayıs 2004 yılında gönderilen hata raporunun yorum kısmı ise epey eğlenceli: "Should be fixed in the next release. Not for Tiger. xxxxx@xxxxx 2004-05-11 Finally fixing for Mustang. Can't even compute average of two ints is pretty embarrassing."

3 Haziran 2006 Cumartesi günü yollanan yorumlara göre ise, benzer problemden ötürü Solaris'teki look komutu yaklaşık 1 GB'den büyük dosyalar için düzgün çalışmıyor.


Yorumlar yazarlarına aittir. İçeriklerinden hiçbir şekilde sorumlu değiliz.

Ynt: BinarySearch ve MergeSort kullandıysanız kodunuzu kontrol edin!

ahmetaa @ Pazartesi, 5 Haziran 2006 (16:03 TSI) (#24078)
Evet gercekten tatsiz gorunen bir hata. bu hatanin sadece 1 milyar ve uzeri boyutlu dizilerde gerceklesmesi bu ana kadar gozden kacmasina neden olmus gorunuyor. Bu boyutlu diziler uzerinde binary search islemine pratik olarak rastlamak pek mumkun olmasa gerek. Burada eger bu sekil bir islem ihtiyaci olan varsa sanirim uc cozum onerilebilir, 1- binary-search islemini elle yazin 2- O projeniz icin IBM ya da BEA ya da baska bir Java kullanin.. 3- Eger cok kritik degilse Mustang'in cikmasini ya da bu hatanin geri 5 surumune atilmasini bekleyin..

Ynt: BinarySearch ve MergeSort kullandıysanız kodunuzu kontrol edin!

tongucyumruk @ Pazartesi, 5 Haziran 2006 (19:53 TSI) (#24085)
Öhüm, Chris Stephenson'ın bir e-postasında konu hakkında yaptığı yorumu izninizle buraya taşıyorum...
You will note that you need NOT look at your binary search, quicksort etc if you wrote in a programming language where "integers" are actually integers, not integers modulo 2^32 The bug is an integer overflow bug.... So users of Scheme, Common LISP, Python can, at least for this bug, breathe easily! cs
Kısa bir Türkçe özet geçmek gerekirse: Sorunun kaynağı tamsayıların gerçek tamsayılar yerine "sayı mod 2^32" şeklinde tanımlanmasından kaynaklanan bir tamsayı taşması durumu. Eğer "gerçek" tamsayılara sahip Scheme, Common Lisp veya Python gibi bir dil kullanıyorsanız bu hata için endişe etmenize gerek yok.

Ynt: BinarySearch ve MergeSort kullandıysanız kodunuzu kontrol edin!

bm @ Pazartesi, 5 Haziran 2006 (20:38 TSI) (#24092)
Hmm, Bentley bunu atlayacak bir adam degil. O kitap var bende, baktim, bunlari anlattigi bolumun sonundaki egzersizlerde "bazi standartlara gore bu ispat tamamlanmis degil" deyip arasinda 'word overflow' da olan bir suru fikri listelemis.

Digerlerinin de soyledigi gibi burada en az iki farkli seviyede hata var: (1) Bentley'den kopya cekip rahat etmek, (2) C/Java filan tipi dillerdeki tamsayi toplamasinin aslinda tamsayi toplamasi olmadigini dusunememek. Benzer hatalar floating point aritmetigi icin de yapiliyor.

Soylenen Lisp vs. ozelligi dogru. Dogru durust type inference yapan derleyiciler de o kodu hem dogru hem hizli yazmayi saglarlardi. (meraklisi varsa mesela sbcl ile bir denesin)

Ynt: BinarySearch ve MergeSort kullandıysanız kodunuzu kontrol edin!

cbc @ Pazartesi, 5 Haziran 2006 (22:35 TSI) (#24116)
temel ve basit kuralı hiçbir zaman atlamamak gerekiyor.

"yazdığınız kod/tasarladığınız algoritmayı uç değerler için test edin."

FM Kare:
Schrödinger'in Kedisi


8 yorum


FM GİRİŞ

Kullanıcı Adı:
Şifre:

Şifremi Unuttum Yeni Kullanıcı

ORTAMDAKİLER (5 Dakika)

  • 29 ziyaretçi
  • Bugün, 18910 sayfa görüntüleme (662 unique)
SON YORUMLAR

ALEV ALEV (Son 15 gün)

GEÇMİŞ MAKALELER

FM TARİHİNDE BUGÜN




Cuma, 3 Eylül 2010, 14:27 TSI