Forum: D Programlama Dili RSS
D'nin olanakları bir CPU hatasını ortaya çıkartmaya yardım etmiş
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ı: D'nin olanakları bir CPU hatasını ortaya çıkartmaya yardım etmiş
D geliştiricilerinden olan Don, digitalmars.D.announce grubunda "Phobos unit testing uncovers a CPU bug" diye bir konu açtı.

Şu programdaki assert denetimi Intel işlemcilerinde başarıyla geçiyormuş (bende öyle); AMD işlemcilerinde ise geçmiyormuş:

import std.math;
 
void main()
{
     assert( yl2x(0x1.0076fc5cc7933866p+40L, LN2)
    == 0x1.bba4a9f774f49d0ap+4L); // Pass on Intel, fails on AMD (Intel'de geçer, AMD'de geçmez)
}

Çünkü yl2x(0x1.0076fc5cc7933866p+40L, LN2) işleminin sonucu şöyle çıkıyormuş:


Intel:  0x1.bba4a9f774f49d0ap+4L
AMD:    0x1.bba4a9f774f49d0cp+4L


Fark, kesirli sayı gösteriminin son bitinde olduğu için o kadar önemli değil, ama işlemciler arasındaki bir farkı ortaya koymuş oluyor. (Aslında sonuç IEEE kesirli sayı kurallarına uyacaksa, o CPU'lardan birisinin hatalı olduğunu kabul edebiliriz. Beklentiyi karşılamadığına bakılırsa, hatalı olan AMD.)

Don, D'nin aşağıdaki olanakları olmasa, CPU'larda böyle bir fark bulunduğunu ortaya çıkartmış olmayacaklarını; o farkı, bir C kütüphanesindeki dönüşüm kayıplarına yoracaklarını söylüyor:

- Birim testleri

- Code coverage (güzel Türkçesini bilen var mı?): bu, dmd'nin program satırlarının ne kadarının kullanıldığını veya test edildiğini gösteren olanağı (-cov seçeneği). Çok yararlı bir olanak, çünkü örneğin birim testleri yetersiz olduğunda, bir if koşulunun else bloğu hiç denenmiyor olabilir. -cov, programın ne kadarının işletildiğini gösterir.

- Kesirli sayılar D'de onaltılı düzende de yazılabiliyorlar. Hatırlatmak için, şu sayfada "Kesirli sayılar" başlığında var:

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

Ali

Not: Bunların asıl konuyla ilgisi yok ama merakımı gidermek için yl2x'i belgelerde aradım ama bulamadım. phobos/std/math.d dosyasına baktığımda şu bildirimi görüyorum:

@safe pure nothrow real yl2x(real x, real y);         // y * log2(x) 

Açıklamasından anlaşıldığına göre, birinci parametresinin 2 tabanındaki logaritmasının ikinci parametresi ile çarpımıymış.

LN2 de şöyle tanımlı:

enum real LN2 =        0x1.62e42fefa39ef358p-1; /** ln 2 */  // 0.693147 fldln2 

O da 2'nin doğal logaritmasının önceden hesaplanmış olan sabit değeri.
Kadir Can #2
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Nasıl bir hata olduğunu anlayamadım. :huh:
acehreli (Moderatör) #3
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ı
Kullanımda önemli bir hata değil; çünkü kesirli sayının en düşük biti ile ilgili.

IEEE kesirli sayı düzeni, kırpılmayı da standartlaştırmıştır. Yine günlük hayattan bir örnek: 1/3'ü virgülden sonra iki hane ile sınırlarsak, 0.33 yazarız. 2/3'ü ise 0.66 diye değil, 0.67 olarak yazarız. Çünkü öyle yazmasak, hep bir kayıp oluşur: 0.33 + 0.66 == 0.99'dur. Oysa 0.67 yazılınca, toplam 1.00 olur.

Bunu zaten hepimiz biliyoruz: kırpılan ilk hane 5 veya daha büyükse, kırpılmayan son hane bir yukarı ötelenir; 4 veya daha düşükse ötelenmez.

İşte hata, benim tahminime göre AMD'nin bu kırpılma kurallarını doğru gerçekleştirmemesinden kaynaklıyor. Tahmin...

Ali
Kadir Can #4
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler Ali Bey.
Çok da önemli olmadığını sanıyorum ama mühendislere sıkıntı yaşatabilir.
acehreli (Moderatör) #5
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ı
Bilgisayarı bilimsel deney amaçlı kullananlara da sıkıntı yaratıyormuş. Aynı programın (D değilmiş) evdeki bilgisayarla üniversitedeki bilgisayar arasında farklı sonuç ürettiğini yazmışlar.

Ali
Mengu (Moderatör) #6
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
abi bunun basligi nerde?
http://www.mengu.net - some kind of monster
acehreli (Moderatör) #7
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ı
Mengü, sorunu doğru anladığımdan emin değilim ama asıl konu şu: :)

  http://www.digitalmars.com/webnews/newsgroups.…?art_grou…

Ali
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:
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-21, 19:40:21 (UTC -08:00)