- ベストアンサー
Fortranについて
こんにちは。 山といいます。 Fortranのコードについて誰か知ってたら、教えてほしいのです。 下記の(1)の箇所の意味がどうも理解できないのですが、これってどういう意味 なのでしょうか? ・・・・・・・・・・・・・・・・・・・・・・・・・・ R1=ALOG(D(2,J+1))*EMR+ALOG(D(2,J))*(1.0-EMR) RLOG=ALOG(R) IF(RLOG-R1) 170,180,180 ←(1) 170 I=1 R2=R1 R1=ALOG(D(1,J+1))*EMR+ALOG(D(1,J))*(1.0-EMR) GO TO 190 180 I=2 R2=ALOG(D(3,J+1))*EMR+ALOG(D(3,J))*(1.0-EMR) 190 RR=(RLOG-R1)/(R2-R1) ・・・・・・・・・・・・・・・・・・・・・・・・・・ 分かった方、教えてください。 よろしく。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
括弧の中の演算結果によって分岐します。 負なら170へ 0なら180へ 正なら180へ
その他の回答 (3)
- ultraCS
- ベストアンサー率44% (3956/8947)
なつかしいので余談含みで これは計算(型)IF文というもので、演算結果によって分岐するものです。初期のFORTRANでは、アセンブリ言語と相性のよい書き方なのでこれが使われました。 簡単にいうと IF(RLOG-R1) 170,180,180 がアセンブラになると(仮想言語として書きます) SUB RLOG,R1 RLOG-R1を実行 JL 170 負なら(マイナスのフラグがセットされたら)170へ JZ 180 0なら(ゼロフラグがセットされたら)180へ JB 180 正なら(プラスのフラグがセットされたら)180へ というように、FORTRANのソースからマシン語に変換しやすく、コンパイラのオーバーヘッドが小さくて済むためです。 コンピュータにおいては、演算が行われるとその結果に対してフラグがセットされるような設計になっています(初期のものでは、演算フラグの状態を調べる命令が別にあってそれをやってからというのもありました)。 論理IF文が使えただけでも朗報でしたが、FORTRAN77でELSE IFが使えるようになったときはけっこう感動したものです。 割り当て型GOTO文なんてのもありました(まだあるのかな)。
お礼
ultraCS様。ご丁寧に回答して頂きまして、誠にありがとうございました。
- 530529
- ベストアンサー率16% (86/521)
ご参考になればと書かせていただきます。 昔々のJIS FORTRAN 3000レベルではお書きになられている形のIF文しか使えませんでした。したがって、プログラムを作る際にGOTO文と文番号はいっぱい必要でした。
お礼
ご回答ありがとうございます。旧水準当時のコードだといろいろ分かりづらい書き方になってしまうのですね。
- ymmasayan
- ベストアンサー率30% (2593/8599)
No.1です。補足質問に回答します。 > ifの括弧の中身が負の場合、170へジャンプした後、Go to 190とありますので、 > 180を飛ばして190の部分へジャンプしますよね? その通りです。 > 次にifの括弧の中身が0または正の場合、180へジャンプした後はやはり190へ > ジャンプすると解釈してよろしいでしょうか? 190へはジャンプするわけでは有りません。下に降りるだけです。 ジャンプと言うのは、命令が書いてある順序を無視して飛び出す事を言います。
お礼
ymmasayan様。いろいろご丁寧のご回答して頂きまして、ありがとうございました。またよろしくお願いいたします。失礼します。
お礼
ymmasayan様。ご回答ありがとうございました。なるほどそういう意味なのですか。勉強不足でした。追加の質問させて頂きたいのですが、ifの括弧の中身が負の場合、170へジャンプした後、Go to 190とありますので、180を飛ばして190の部分へジャンプしますよね?次にifの括弧の中身が0または正の場合、180へジャンプした後はやはり190へジャンプすると解釈してよろしいでしょうか?たびたびすみません。