この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
fortran:tips [2016/06/02 17:01] saito [makefileでコンパイル その2] |
fortran:tips [2017/10/03 12:55] (現在) |
||
|---|---|---|---|
| ライン 3: | ライン 3: | ||
| * [[http://www.owlnet.rice.edu/~ceng303/manuals/fortran/]] が役に立ちそう. | * [[http://www.owlnet.rice.edu/~ceng303/manuals/fortran/]] が役に立ちそう. | ||
| * | * | ||
| + | |||
| + | ===== よくある間違い ===== | ||
| + | コーディングにおいてよくある間違いをまとめる. | ||
| + | |||
| + | ==== べき乗の順序 ==== | ||
| + | <nowiki>計算の優先順位は | ||
| + | +- < */ < ** | ||
| + | である.</nowiki> | ||
| + | <code fortran> | ||
| + | print*,-1**0 | ||
| + | </code> | ||
| + | <nowiki> | ||
| + | これは-(1**0)と解釈されるので,出力結果は−1. | ||
| + | -1に対してべき乗する場合は,(-1)**0. | ||
| + | </nowiki> | ||
| + | |||
| + | ==== 論理演算の順序 ==== | ||
| + | <nowiki> | ||
| + | 論理演算子の優先順位は | ||
| + | .eqv., .neqv. < .or. < .and. < .not. | ||
| + | である. | ||
| + | </nowiki> | ||
| + | <code fortran> | ||
| + | logical :: a=.false. | ||
| + | num :: i=1 | ||
| + | if(a.eqv..false..or.i==1) then | ||
| + | print*,'if' | ||
| + | else | ||
| + | print*,'else' | ||
| + | end if | ||
| + | </code><nowiki> | ||
| + | これは,a.eqv.(.false..or.i==1) と解釈される. | ||
| + | (.false..or.i==1) はtrueなので,上のコードはelseを吐き出す. | ||
| + | 前後の条件をorでつなぐ場合は, | ||
| + | if((a.eqv..false.).or.(i==1)) としてカッコで順序を明示する. | ||
| + | </nowiki> | ||
| + | |||
| + | ちなみに | ||
| + | * (.ture..or..false.)は.true.(どちらかが真なのでtrue) | ||
| + | * (.ture..and..false.)は.false.(どちらも真でないのでfalse) | ||
| + | になる. | ||
| ===== allocated ===== | ===== allocated ===== | ||
| すでにallocateしたかどうかわからない時は,allocatedで確かめてからallocateする. | すでにallocateしたかどうかわからない時は,allocatedで確かめてからallocateする. | ||