うちの研究室ではCよりもFortran90の勢力の方が強いです。
休日と言うことでFortran90:自由形式の勉強もかねてC言語で書かれたKdV方程式の数値計算プログラムをFortran90への翻訳をしてみました。
ここで、結構落とし穴にはまってしまいました。
最初は配列の記述法が違うくらいだと思ってました。
Cでは
double a[3];
のように宣言しますが、
Fortran90だと
double precision,dimension(3) :: a
と宣言します。※文末のセミコロンは要りません。
配列の目印が[]から()に変わっただけかと思っていたのが甘かった・・。
これだけなら良かったのですが、最大の落とし穴は
Fortranでは配列が0ではなく1から始まること
でした。
Cと同じようにFortranでも配列の範囲外アクセスの例外が発生して落ちてしまいます。
これに気付くのに時間がかかりました。
言語を一つだけでなく、色々使う人はこういう細かいところにも気を配らないといけないみたいですねぇ。
ではこの辺で。
C言語からFortran90への翻訳
Re: C言語からFortran90への翻訳
サブルーチン(?)とか文関数(?)とか副プログラム(?)とか
いろいろありすぎて混乱した記憶があります。
授業はFortran90だったのにコンパイラが
FORTRAN77でさらに混乱しました。
いくつも言語を使える人ってすごいですね~
いろいろありすぎて混乱した記憶があります。
授業はFortran90だったのにコンパイラが
FORTRAN77でさらに混乱しました。
いくつも言語を使える人ってすごいですね~
Re: C言語からFortran90への翻訳
>shiro4aoさん
いくつも言語を使っている割には全然使いこなせていない感じがしている今日この頃です^^;
Fortran90・自由形式を使ってはいますが、固定形式とかFortran77は全くと言って良いほど読めませんし、書けません。バージョン&形式が違うと全くの別言語ですよね・・。
いくつも言語を使っている割には全然使いこなせていない感じがしている今日この頃です^^;
Fortran90・自由形式を使ってはいますが、固定形式とかFortran77は全くと言って良いほど読めませんし、書けません。バージョン&形式が違うと全くの別言語ですよね・・。
Re: C言語からFortran90への翻訳
double precision,dimension(0:3-1) :: a
と宣言したら0~2になるのではないでしょうか?
と宣言したら0~2になるのではないでしょうか?
Re: C言語からFortran90への翻訳
>ISLeさん
ちょっとコロンが気になって調べてみたら配列の開始位置を変える機能があったんですね。知らなかった・・。
でもdouble precision,dimension(0:3-1) :: a
よりは、直接
double precision,dimension(0:2) :: a
としてしまった方が良い気がします。あくまで気がするだけですが。
ちょっとコロンが気になって調べてみたら配列の開始位置を変える機能があったんですね。知らなかった・・。
でもdouble precision,dimension(0:3-1) :: a
よりは、直接
double precision,dimension(0:2) :: a
としてしまった方が良い気がします。あくまで気がするだけですが。
Re: C言語からFortran90への翻訳
意味のある3は残しておきたい気持ちになります。
このような場合はたいてい即値ではなく識別子を与えるべきですが。
このような場合はたいてい即値ではなく識別子を与えるべきですが。