浮動小数点型の詳細と浮動小数点リテラルの書き方について説明します。浮動小数点型は、任意の実数を表現するプリミティブ型です。
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);
浮動小数点型の変数は、任意の実数を格納しますが、3つの特殊な値を格納する場合があります。
これら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-2020 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.