浮動小数点数出力は常に基数 10 を使用して表示されます。
f.
( r – ) floating-ext “f-dot”
(浮動小数点数) r を指数なしで表示し、 その後に空白1つ続けます。
fe.
( r – ) floating-ext “f-e-dot”
r を工学表記(3 で割り切れる指数) で表示し、 その後に空白1つ続けます。
fs.
( r – ) floating-ext “f-s-dot”
r を科学表記(指数付き)で表示し、 その後に空白1つ続けます。
fp.
( r – ) floating-ext “f-p-dot”
r を SI 接頭辞表記(3 で割れる指数を使用し、 可能な場合は SI 接頭辞に変換)で表示し、 その後に空白1つ続けます。
数値 1234.5678E23 をさまざまな浮動小数点数出力形式で出力する例を以下に示します。
1234.5678E23 f. 123456780000000000000000000. ok 1234.5678E23 fe. 123.456780000000E24 ok 1234.5678E23 fs. 1.23456780000000E26 ok 1234.5678E23 fp. 123.456780000000Y ok
出力桁幅は以下の影響を受けます:
precision
( – u ) floating-ext “precision”
u は、 f.
や fe.
や fs.
や fp.
で現在使用されている有効桁数です。
set-precision
( u – ) floating-ext “set-precision”
f.
や fe.
や fs.
や fp.
で現在使用されている有効桁数を u
に設定します。
以下のコマンドを使用して、 出力をより詳細に制御できます:
f.rdp
( rf +nr +nd +np – ) gforth-0.6 “f.rdp”
浮動小数点数 rf を書式化して表示します。 出力の合計幅は nr です。 固定小数点表記の場合、 小数点以下の桁数は
+nd、 有効桁数の最小値は np です。 Set-precision
は f.rdp
には影響しません。
固定小数点表記は、 有効桁数が少なくとも np の場合で、 かつ、 小数点以下の桁数が収まる場合に、 使用されます。
固定小数点表記が使用されない場合は指数表記が使用され、 それでも適合しない場合はアスタリスクが出力されます。
数値がまったく適合しないリスクを避けるために、 nr>=7 を使用することをお勧めします。 f.rdp
が指数表記に切り替わるケースを避けるために、 nr>=np+5 をお勧めします。 どうしてかというと、
固定小数点表記でも有効桁数が少なすぎるのに、 指数表記では有効桁数が更に少なくなるためです。 一部の数値を固定小数点表記しなければならない場合は、
nr>=nd+2 をお勧めします。 np の値が小さいほど、 より多くの場合で固定小数点表記で表示されます
(固定小数点表記に有効数字がほとんどまたはまったく残っていない場合)。 すべての数値を指数表記したい場合は、np>nr
をお勧めします。
出力にどのような影響を与えるかをより直感的に理解できるように、 パラメーターの組み合わせの例をいくつか示します。 各行内は同じ数値が出力されていて、 各列には同じパラメーターの組み合わせが出力に使用されています:
12 13 0 7 3 4 7 3 0 7 3 1 7 5 1 7 7 1 7 0 2 4 2 1 |-1.234568E-6|-1.2E-6| -0.000|-1.2E-6|-1.2E-6|-1.2E-6|-1.2E-6|****| |-1.234568E-5|-1.2E-5| -0.000|-1.2E-5|-.00001|-1.2E-5|-1.2E-5|****| |-1.234568E-4|-1.2E-4| -0.000|-1.2E-4|-.00012|-1.2E-4|-1.2E-4|****| |-1.234568E-3|-1.2E-3| -0.001| -0.001|-.00123|-1.2E-3|-1.2E-3|****| |-1.234568E-2|-1.2E-2| -0.012| -0.012|-.01235|-1.2E-2|-1.2E-2|-.01| |-1.234568E-1|-1.2E-1| -0.123| -0.123|-.12346|-1.2E-1|-1.2E-1|-.12| |-1.2345679E0| -1.235| -1.235| -1.235|-1.23E0|-1.23E0|-1.23E0|-1E0| |-1.2345679E1|-12.346|-12.346|-12.346|-1.23E1|-1.23E1| -12.|-1E1| |-1.2345679E2|-1.23E2|-1.23E2|-1.23E2|-1.23E2|-1.23E2| -123.|-1E2| |-1.2345679E3|-1.23E3|-1.23E3|-1.23E3|-1.23E3|-1.23E3| -1235.|-1E3| |-1.2345679E4|-1.23E4|-1.23E4|-1.23E4|-1.23E4|-1.23E4|-12346.|-1E4| |-1.2345679E5|-1.23E5|-1.23E5|-1.23E5|-1.23E5|-1.23E5|-1.23E5|-1E5|
以下を使用して、 数値を表示する代わりに文字列を生成できます:
f>str-rdp
( rf +nr +nd +np – c-addr nr ) gforth-0.6 “f>str-rdp”
rf を c-addr nr の文字列に変換します。 nr +nd np の変換規則と意味は f.rdp
と同じです。 結果は表示数値出力(pictured numeric output)バッファーに格納され、
そのバッファを破壊するものによって破壊されます(訳注: このバッファーは、 他の 表示数値出力(pictured numeric output)
と共用であるということ)。
f>buf-rdp
( rf c-addr +nr +nd +np – ) gforth-0.6 “f>buf-rdp”
rf を c-addr nr の文字列に変換します。 nr nd np の変換規則と意味は f.rdp
と同じです。
以下のような、 高レベルの FP-to-string ワードを実装するために使用されるプリミティブもあります:
represent
( r c-addr u – n f1 f2 ) floating “represent”
r の 10 進仮数部(別名 mantissa)をバッファ c-addr u 内の文字列に変換します。 n は指数で、r が負の場合は f1 が true、 r が有効(Gforth の有限数)の場合は f2 が true です(訳注: 仮数部が u の桁数になるようそれ以下を四捨五入するっぽい)。