LoginSignup
0
0

負の実数の実数冪乗について

Posted at

Fortran では負の実数の実数冪乗は禁止されている件、裏とりをするとわかることがあります。

Fortran90

§7.1.7 演算の評価 3パラ

演算結果が数学的に定義されない数値演算は、実行可能プログラムの実行に現れてはならない。
 例1 ゼロによる除算
 例2 一次子の値がゼロでべき指数の値がゼロ又は負のべき乗
 例3 実数型一次子の値が負で、べき指数が実数型のべき乗

一次子というのは二項演算子であれば左辺のことです。

Fortran95

手元にないのであとで。たぶん、 Fortran90 と同じでしょう。

Fortran2003

§7.1.8 演算の評価 2パラ

処理系が採用している算術で定義されない数値演算は、実行してはならない。
実数型一次子の値が負であって、べき指数が実数型であるべき乗は、してはならない。

負の実数の実数冪乗については変わりませんが、3つあった禁止例が1つになってしまったことに気づきます。

ゼロによる除算はがなくなったのは、おそらく、Fortran2003 で IEEE モジュールを導入して、フラグを設定してゼロ割りで異常終了しないことが選択できるようになったから、実数型のゼロ割りを禁止したままだと辻褄が合わなくなるからですね。

ゼロの冪乗についても同様で、異常終了させないことができるようになりました。

そのへんは、IEEE754 そのものではありませんが、C言語のpow(3) のマニュアルからも読み取れます。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/pow.3.html
浮動小数点例外 FE_INVALID が上がる場合はフラグでは止められません。いっぽう、FE_DIVBYZERO や FE_OVERFLOW が上がる場合はフラグで止められるわけです。

Fortran2018

JIS規格は出ていませんが、Fortran2003 と同じです。

§10.1.5.2.4 para 1

The execution of any numeric operation whose result is not defined by the arithmetic used by the processor is prohibited.
Raising a real negative value to a real power is prohibited.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0