• ベストアンサー

FORTRAN77(g77)で(D)CBRTがエラーになってしまいます

FORTRAN77(g77)をVine Linux 4.2で使用しています。 立方根の計算をしたいのですが、コンパイル時に"(D)CBRT"がエラーになってしまいます。 原因・代替策など御助言いただければ幸いです。 なお、(D)SQRTは問題なくコンパイル・実行できました。 以下、テスト用ソースとそのコンパイル時のエラーメッセージです。 [ソース] program a implicit none real*8 n write(*,*)"n= ?" read(*,*)n write(*,*)DCBRT(n) stop end [エラーメッセージ] a.f: In program `a': a.f:6: write(*,*)DCBRT(n) ^ Invalid declaration of or reference to symbol `dcbrt' at (^) [initially seen at (^)] ※こちらの画面ではスペースがうまく入りませんので悪しからず。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

自信無し。普段、fortranの人間じゃないので見るところ自体が間違っているかも。g95でうまくいかず。 cbrt関数は fortran 77では http://web.mit.edu/sunsoft_v5.1/www/fortran/f77rm/6_intrinsics.doc.html >Intrinsic functions that are Sun extensions of the ANSI FORTRAN 77 standard are marked with ♦. ANSI Fortran 77をSunが拡張したものだよ、と言われています。 fortran 90 http://www.nsc.liu.se/~boein/f77to90/a5.html#section3 にも fortran 95 http://docs.sun.com/source/819-3684/2_F95_Intrins.html にも載っていませんので、 GNU Fortran 77にはひょっとしたらないのかもしれません。 最初のページに載っていた a**(1/3)ではうまくいかず、(割り算の戻り値が整数なのかな?) a**(1.0/3.0)で 5.000000239824943 を出すことが出来ています。誤差はありますが。一応アドバイスまで

autumn1985
質問者

お礼

ご丁寧に調べていただき、ありがとうございます。 実は(1/3)乗でもうまくいっていなかったので助かりました。

その他の回答 (1)

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.2

まあ、1/3乗すれば済む話だと思いますが CBRT(Cubuic Root)はANSIの規格にありません。ANSI準拠のF77で確実に使える組み込み関数はのここにあるものだけです。確実に使うには、仕様を拡張したFORTRANか、数学パッケージが必要です。 http://www.fortran.com/F77_std/rjcnf-15.html#sh-15.10 Sunの外にも、VMSのFORTRAN(VAX FORTRAN)、VMS互換を謳ったRyan McFarlandのFORTRANなどにもあったと記憶しています(まだあるのかな)。

autumn1985
質問者

お礼

ご助言ありがとうございます。 拡張したものでなければ使えないとは、存じませんでした。 使えるものを探してもみます。 まずは、指数法則をそのまま試させていただきます。

関連するQ&A

専門家に質問してみよう