• ベストアンサー

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) ・・・・・・・・・・・・・・・・・・・・・・・・・・ 分かった方、教えてください。 よろしく。

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

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

括弧の中の演算結果によって分岐します。 負なら170へ 0なら180へ 正なら180へ

yamayama1
質問者

お礼

ymmasayan様。ご回答ありがとうございました。なるほどそういう意味なのですか。勉強不足でした。追加の質問させて頂きたいのですが、ifの括弧の中身が負の場合、170へジャンプした後、Go to 190とありますので、180を飛ばして190の部分へジャンプしますよね?次にifの括弧の中身が0または正の場合、180へジャンプした後はやはり190へジャンプすると解釈してよろしいでしょうか?たびたびすみません。

その他の回答 (3)

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

なつかしいので余談含みで これは計算(型)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文なんてのもありました(まだあるのかな)。

yamayama1
質問者

お礼

ultraCS様。ご丁寧に回答して頂きまして、誠にありがとうございました。

  • 530529
  • ベストアンサー率16% (86/521)
回答No.3

ご参考になればと書かせていただきます。 昔々のJIS FORTRAN 3000レベルではお書きになられている形のIF文しか使えませんでした。したがって、プログラムを作る際にGOTO文と文番号はいっぱい必要でした。

yamayama1
質問者

お礼

ご回答ありがとうございます。旧水準当時のコードだといろいろ分かりづらい書き方になってしまうのですね。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

No.1です。補足質問に回答します。 > ifの括弧の中身が負の場合、170へジャンプした後、Go to 190とありますので、 > 180を飛ばして190の部分へジャンプしますよね? その通りです。 > 次にifの括弧の中身が0または正の場合、180へジャンプした後はやはり190へ > ジャンプすると解釈してよろしいでしょうか? 190へはジャンプするわけでは有りません。下に降りるだけです。 ジャンプと言うのは、命令が書いてある順序を無視して飛び出す事を言います。

yamayama1
質問者

お礼

ymmasayan様。いろいろご丁寧のご回答して頂きまして、ありがとうございました。またよろしくお願いいたします。失礼します。

関連するQ&A