D.ershane Çözümleri Ddili.org

Kesirli Sayılar

  1. float yerine double kullanıldığında farklı biçimde şaşırtıcı olan bir sonuçla karşılaşılır:
    // ...
    
        double sonuç = 0;
    
    // ...
    
        if (sonuç == 1) {
            writeln("Beklendiği gibi 1");
    
        } else {
            writeln("FARKLI: ", sonuç);
        }
    

    sonuç == 1 karşılaştırması doğru çıkmadığı halde sonuç 1 olarak yazdırılmaktadır:

    FARKLI: 1
    

    Bu şaşırtıcı durum, kesirli sayılar için normalde kullanılan çıktı düzeniyle ilgilidir. Virgülden sonraki kısım daha fazla haneyle yazdırıldığında değerin aslında tam 1 olmadığı görülür. (Çıktı düzenini ilerideki bir bölümde göreceğiz:)

            writefln("FARKLI: %.20f", sonuç);
    
    FARKLI: 1.00000000000000066613
    
  2. Önceki bölümdeki hesap makinesi programındaki üç satırdaki int'leri double yapmak yeter:
            double birinci;
            double ikinci;
    
            // ...
    
            double sonuç;
    
  3. Problemde 5 yerine daha fazla sayı girilmesi istenseydi programın nasıl daha da içinden çıkılmaz bir hale geleceğini görüyor musunuz:
    import std.stdio;
    
    void main() {
        double sayı_1;
        double sayı_2;
        double sayı_3;
        double sayı_4;
        double sayı_5;
    
        write("Sayı 1: ");
        readf(" %s", &sayı_1);
        write("Sayı 2: ");
        readf(" %s", &sayı_2);
        write("Sayı 3: ");
        readf(" %s", &sayı_3);
        write("Sayı 4: ");
        readf(" %s", &sayı_4);
        write("Sayı 5: ");
        readf(" %s", &sayı_5);
    
        writeln("İki katları:");
        writeln(sayı_1 * 2);
        writeln(sayı_2 * 2);
        writeln(sayı_3 * 2);
        writeln(sayı_4 * 2);
        writeln(sayı_5 * 2);
    
        writeln("Beşte birleri:");
        writeln(sayı_1 / 5);
        writeln(sayı_2 / 5);
        writeln(sayı_3 / 5);
        writeln(sayı_4 / 5);
        writeln(sayı_5 / 5);
    }