0

Fortran 77 では、以下は違法であることが判明しました。

c
      program main
      real a
      parameter(a=(10.)**(.5))
c
...

その理由は、パラメーター ステートメントが定数演算式を取り、指数が整数の場合を除き、べき乗が正しくないためです。(セクション 6.1.3 および 8.6 http://www.fortran.com/F77_std/rjcnf0001-sh-8.html#sh-8.6 )。この制限が標準の新しいリビジョンで緩和されたかどうかは誰にもわかりませんか? そもそもなぜこれが違法になるのでしょうか?

4

2 に答える 2

3

はい、緩和されました。Fortran 2003 では、sinや などの組み込み関数を使用することもできますexp

于 2012-04-16T12:54:19.787 に答える
0

私の推測では、整数指数には、コンパイラーがプリコンパイルのステップとして値を置き換えるために呼び出すことができる単純な実装があると思います。ただし、非整数指数 (および負の指数) は、実数に評価できない値を持つ可能性があります。要点は、この例が計算できないということではなく、コンパイラが予測可能である必要があるということです。特定の式が適切な数値に評価されるかどうかを判断できるルーチンを作成するよりも、これらの式を単に失敗させる方が簡単です。これは、式をコンパイルして実行し、値を使用することによってではなく、コンパイル前に行われることを忘れないでください。そのため、スコープは一般的な fortran ほど広くありません。

それが問題である場合は、f90/f77 ファイルではなくマクロと F90/F77 を検討して、コンパイラがプリプロセッサを実行することを認識できるようにします。

または、電卓で値を 16 dp に計算して、それを使用します。

または、パラメーターではなく通常の変数にします。コストは最小限になります。

于 2012-04-16T12:35:21.183 に答える