浮動小数点型

  1. floatdoubleに置き換えると、別の意味で驚くべき結果になる。
    // ...
    
        double result = 0;
    
    // ...
    
        if (result == 1) {
            writeln("As expected: 1");
    
        } else {
            writeln("DIFFERENT: ", result);
        }
    D

    値はresult == 1の比較に失敗しているが、1として出力されている。

    異なる: 1

    この意外な結果は、浮動小数点値の出力形式に関係している。小数点以下の桁数を増やすと、値のより正確な近似値が表示される。 (出力のフォーマットについては、後の章で説明する。)

    writefln("DIFFERENT: %.20f", result);
    D
    異なる: 1.00000000000000066613
  2. 3つのintを3つのdoubleに置き換えるだけで十分だ:
    	double first;
    	double second;
    
    	// ...
    
    	double result;
    D
  3. 以下のプログラムは、5つ以上の変数が必要になった場合、どれだけ複雑になるかを示している:
    import std.stdio;
    
    void main() {
        double value_1;
        double value_2;
        double value_3;
        double value_4;
        double value_5;
    
        write("Value 1: ");
        readf(" %s", &value_1);
        write("Value 2: ");
        readf(" %s", &value_2);
        write("Value 3: ");
        readf(" %s", &value_3);
        write("Value 4: ");
        readf(" %s", &value_4);
        write("Value 5: ");
        readf(" %s", &value_5);
    
        writeln("Twice the values:");
        writeln(value_1 * 2);
        writeln(value_2 * 2);
        writeln(value_3 * 2);
        writeln(value_4 * 2);
        writeln(value_5 * 2);
    
        writeln("One fifth the values:");
        writeln(value_1 / 5);
        writeln(value_2 / 5);
        writeln(value_3 / 5);
        writeln(value_4 / 5);
        writeln(value_5 / 5);
    }
    D
    floating_point.solution.1