Forum: Duyurular RSS
D Bug
Hataları burada duyuralım mı?
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D Bug
Bir başlangıç olsun ama önemsiz gördüğüm ve belki günlük hayatta kullandığımız matematiksel ifadenin yansıması diyebileceğimiz bir özelliği hemen paylaşmalıyım:
int[3] one = -1;
int[3] ONE = ~0;
assert(one == ONE);
 
int[3] two = -2;
int[3] TWO = ~1;
assert(two == TWO);
 
double[3] flo = -3.0;
double[3] FLO = ~2;
assert(flo == FLO);
Burada zannedersem yaklaşıktır ifadesinin değişken kurulurken dizi elemanlarına uygulanmasını görmekteyiz. Dikkat ederseniz yaklaşık işaretinden sonraki sayı kaç ise bir büyüğüne eşitleniyor. Yani bunun (örn. ikinci örneğin) -1,5 değerinde olduğunu farz edersek değeri yukarıya (-2'ye yuvarlanıyor.

Ama belki de bu bir BUG'dır. Öyle ya neden sayı eksiye (-) yuvarlanmakta...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yoksa dur dur...:)

Bu bir matematiksel işlem değil de yoksa XOR mu...haha
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
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ı
Yanıtlanan mesaj #1
Evet şaşırtıcı ama herşey dil kurallarına uygun olarak gelişiyor.

Senin "yaklaşıktır" dediğin işlece ben "Tersini alma işleci" demiştim:

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

Değerin bütün bitlerini tersine çevirir: 0'lar 1'e, 1'ler 0'a... -1 ile ~0'ın eşit olmalarının nedeni de bilgisayarların kullandığı ikiye tümleyen aritmetiği nedeniyledir.

Bit olarak gösterimleri şöyle:


-1: 1111_1111_1111_1111
~0: 1111_1111_1111_1111

-2: 1111_1111_1111_1110
~1: 1111_1111_1111_1110

-3: 1111_1111_1111_1101
~2: 1111_1111_1111_1101


Ali
Avatar
Salih Dinçer #4
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Haklısın hocam, ikinin tümleyenini unutmuşum! Yani byte için 127'den sonra 0 (binary 128) gelirken hemen -127'den devam ederek matematiksel olarak yine 0'a yaklaşıyor. Bunu aşağıdaki örnekte göstermeye çalıştım:
import std.stdio, std.string;
 
void main() {
    string delegate (byte) noluyor = b => format("%d\t%d\n", b, ~b) ~
                                          format("%b\t~%.8b", b, ~b);
    noluyor(15).writeln;
    foreach(byte xSay; -16..0) writefln("%d: %b", xSay, xSay);
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj 3 defa değişti; son değiştiren: Salih Dinçer; zaman: 2012-07-27, 02:35.
Avatar
Salih Dinçer #5
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bir küçük bug daha ama bu benim böcüğüm...:)

Yukarıdaki kodu daha önce şöyle yapmıştım ama www.dlang.org sitesinde bu şekilde çalışmadığını gördüm:
Salih Dinçer:
void main() {
    string delegate (byte) noluyor = b => std.string.format("%d\t%d\n", b, ~b) ~
                                          std.string.format("%b\t~%.8b", b, ~b);
    std.stdio.writeln(noluyor(15));
    foreach(byte xSay; -16..0) std.stdio.writefln("%d: %b", xSay, xSay);
}
Amacım kimse import satırını eklemeden deneyebilmesini sağlamaktı. En iyisimi yol yakınken bunu alışkanlık yapmaktan vazgeçmeli. En iyisi bildiğimiz yolmuş bre...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
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: Duyurular 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-19, 19:57:21 (UTC -08:00)