オフィスアワーがそろそろ始まるよ!()

浮動小数点型

浮動小数点型の詳細と浮動小数点リテラルの書き方について説明します。浮動小数点型は、任意の実数を表現するプリミティブ型です。

IEEE754準拠の浮動小数点型

Zenでは、IEEE754準拠の浮動小数点型を4種類サポートしています。

型名 ビット幅 備考
f16 16 IEEE 754 半精度浮動小数点 仮数部 10ビット
f32 32 IEEE 754 単精度浮動小数点 仮数部 23ビット
f64 64 IEEE 754 倍精度浮動小数点 仮数部 52ビット
f128 128 IEEE 754 四倍精度浮動小数点 仮数部 112ビット

コンパイル時浮動小数点型

Zenには、コンパイル時のみ利用できる浮動小数点型comptime_floatがあります。

comptime_float型は、Zenで最も大きな浮動小数点型であるf128と同じ精度を持つことが保証されます。

不動小数点リテラル

浮動小数点リテラルは、デフォルトではcomptime_float型になります。

examples/ch02-primitives/src/floats.zen:4:6

test "float literal" {
    const float = 1234.56;
    ok(@typeOf(float) == comptime_float);

浮動小数点リテラルは、指数表現で書くこともできます。指数のeは小文字でも大文字でもかまいません。

examples/ch02-primitives/src/floats.zen:8:12

    const exp_float = 1.23456e+3;
    ok(exp_float == float);

    const EXP_float = 1.23456E+3;
    ok(EXP_float == float);

NaN, Infinity, -Infinity

浮動小数点型の変数は、任意の実数を格納しますが、3つの特殊な値を格納する場合があります。

  1. NaN (非数)
  2. Infinity (正の無限大)
  3. -Infinity (負の無限大)

これら3つの値は、Zen言語のプリミティブ型ではなく、標準ライブラリ内の値を利用します。

examples/ch02-primitives/src/floats.zen:15:26

test "NaN, infinity, negative infinity" {
    const math = std.math;

    const nan = math.nan(f64);
    const infinity = math.inf(f64);
    const negative_infinity = -math.inf(f64);

    var zero: f64 = 0.0;
    ok((1.0 / zero) == infinity);
    ok((-1.0 / zero) == negative_infinity);
    ok(nan != nan);
}

他のプログラミング言語と同様、NaN同士を比較した結果は、falseになります。

☰ 人の生きた証は永遠に残るよう ☰
Copyright © 2018-2019 connectFree Corporation. All rights reserved.
Zen, the Zen three-circles logo and The Zen Programming Language are trademarks of connectFree corporation in Japan and other countries.