P 形編集記述子は,実数値と複素数値の 2 つの実部中の小数点の位置を移動するけた移動数を指定します。これは次の形式を取ります。
kP
k は,小数点を (左または右に) 移動する位置の数 (けた移動数) を指定する,符号付きの (正の場合,符号は省略可能です) 整定数表現です。k の範囲は -128 ~ 127 です。
書式付き I/O 文の開始時には,けた移動数の値はゼロになっています。けた移動数編集記述子が指定されると,けた移動数はその新しい値に設定され,別のけた移動数編集記述子が現れるまで,それ以降のすべての実数型編集記述子に影響を与えます。
けた移動数をゼロに戻すには,0P を明示的に指定する必要があります。
書式制御の戻りはけた移動数に影響を与えません (書式制御の戻りの詳細については,「書式仕様と I/O 並び間の相互作用」を参照してください)。
入力処理の規則
入力時に正のけた移動数は小数点を左向きに,負のけた移動数は小数点を右向きに移動します (出力時には,効果が逆になります)。
入力時に,F 形,E 形,D 形,EN 形,ES 形,または G 形編集記述子を使った入力欄が明示的な指数を含んでいた場合,けた移動数は効果を持ちません。そうでなければ,対応する I/O 並び項目の内部値は,外部欄データに 10-k を掛けた値となります。たとえば,2P のけた移動数は入力値を .01 倍するので,小数点は左向きに 2 だけ移動します。-2P のけた移動数は入力値を 100 倍するので,小数点は右向きに 2 だけ移動します。
次に,P 形編集記述子を使った入力の例を示します ('^' は,空白文字を表しています)。
書式 入力 値 3PE10.5 ^^^37.614^ .037614 3PE10.5 ^^37.614E2 3761.4 -3PE10.5 ^^^^37.614 37614.0
けた移動数は,それに結合されている最初の実数型編集記述子よりも前になくてはなりませんが,実数型編集記述子の直前にある必要はありません。たとえば,以下の例はいずれも同じ効果を持ちます。
(3P, I6, F6.3, E8.1) (I6, 3P, F6.3, E8.1) (I6, 3PF6.3, E8.1)
けた移動数がそれに結合されている実数型編集記述子の直前にある場合,コンマ区切り子は省略可能となります。
出力処理の規則
出力時に正のけた移動数は小数点を右向きに,負のけた移動数は小数点を左向きに移動します (入力時には,効果が逆になります)。
出力時のけた移動数の効果は,それにどのような種類の実数型編集記述子が結合されているかに依存します。
F 形編集の場合,外部値は,I/O 並び項目の内部値に 10k を掛けた値になります。この場合,データの大きさが変更されます。
正のけた移動数は指数を減らし,負のけた移動数は指数を増やします。
正のけた移動数の場合,k は d + 2 よりも小さくなくてはなりません。さもないと出力変換エラーが発生します。
データ欄の大きさが G 形編集記述子の範囲外にある場合,E 形編集が使用され,けた移動数は E 形出力編集と同じ効果を持ちます。
EN 形および ES 形編集の場合,けた移動数は効果を持ちません。
次に,P 形編集記述子を使った出力の例を示します ('^' は,空白文字を表しています)。
書式 値 出力 1PE12.3 -270.139 ^^-2.701E+02 1P,E12.2 -270.139 ^^^-2.70E+02 -1PE12.2 -270.139 ^^^-0.03E+04
例
次の例は,けた移動数を含んでいる FORMAT 文を示しています。
DIMENSION A(6) DO 10 I=1,6 10 A(I) = 25. WRITE (6, 100) A 100 FORMAT(' ', F8.2, 2PF8.2, F8.2)
上の文は以下の結果を生成します。
25.00 2500.00 2500.00 2500.00 2500.00 2500.00
以下の例は,読み込み時のけた移動数編集の使用例です。
READ (*, 100) a, b, c, d 100 FORMAT (F10.6, 1P, F10.6, F10.6, -2P, F10.6) WRITE (*, 200) a, b, c, d 200 FORMAT (4F11.3)
以下のデータが入力されたと仮定します。
12340000 12340000 12340000 12340000 12.34 12.34 12.34 12.34 12.34e0 12.34e0 12.34e0 12.34e0 12.34e3 12.34e3 12.34e3 12.34e3
プログラムの出力は以下のようになります。
12.340 1.234 1.234 1234.000 12.340 1.234 1.234 1234.000 12.340 12.340 12.340 12.340 12340.000 12340.000 12340.000 12340.000
以下の例は,書き込み時のけた移動数編集の使用例です。
a = 12.34 WRITE (*, 100) a, a, a, a, a, a 100 FORMAT (1X, F9.4, E11.4E2, 1P, F9.4, E11.4E2, & -2P, F9.4, E11.4E2)
プログラムの出力は以下のようになります。
12.3400 0.1234E+02 123.4000 1.2340E+01 0.1234 0.0012E+04
関連情報
制御編集記述子の形式については,「制御編集記述子の形式」を参照してください。