FORTRAN W
- 1 :デフォルトの名無しさん:2006/11/12(日) 17:13:35
- FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。
・FORTRAN関連情報
お約束だが、まずは自分で調べよう
http://www.google.co.jp/
x86で動作するFortranコンパイラ
http://www.nminoru.jp/~nminoru/programming/x86-fortran.html
The Fortran Company
http://www.fortran.com/
Polyhedron Software
http://www.polyhedron.co.uk/
Google Directory - Fortran
http://directory.google.com/Top/Computers/Programming/Languages/Fortran/
・前スレ
FORTRAN III
http://pc8.2ch.net/test/read.cgi/tech/1104724162/
FORTRAN II
http://pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/
- 643 :デフォルトの名無しさん:2009/10/24(土) 00:54:54
- >>642
FORMATの書き方が古い。
まぁg77だから仕方ないのか。
f90で学びなおせばFORMATもそれほどつらくない。
- 644 :デフォルトの名無しさん:2009/10/24(土) 03:17:58
- Fortran77では動的メモリ割付け(allocate)は使えないの?
- 645 :デフォルトの名無しさん:2009/10/24(土) 03:48:06
- >>644
使えない。
- 646 :デフォルトの名無しさん:2009/10/25(日) 00:06:12
- >>644
大きくCOMMONを取って、必要に応じて自分で切り出して使うんだ。
- 647 :デフォルトの名無しさん:2009/10/25(日) 00:56:39
- >>644
大きくCOMMONがとれない環境なのです。
allocateしないと最大メモリまで使えない。
- 648 :デフォルトの名無しさん:2009/10/25(日) 16:16:54
- >>647
むかし過渡期の技術としてダイナミックコモンというのがあった。
ひょっとしたらコンパイラのオプションにあるかもしれない。
その場合、普通のスタティックなコモンより大きく領域が取れるかもしれない。
- 649 :デフォルトの名無しさん:2009/10/27(火) 14:20:53
- >>646
そんなこと教えちゃらめ〜
- 650 :デフォルトの名無しさん:2009/10/28(水) 20:57:22
- allocateを使うとパフォーマンスが落ちるって本当ですか?
実際に使われるサイズに関わらず?
- 651 :デフォルトの名無しさん:2009/10/29(木) 00:56:45
- >>650
多分誤解。
静的配列と比べるならば、それは実行時にアロケート処理するのだから余計な時間はかかるだろう。
しかし、それは計算時間に比べれば瑣末なはず。
POINTERで配列をとった場合は、メモリーの割付が連続したメモリー領域になるとは限らないので
最適化がバリバリなされず、ALLLOCATEでとった場合(連続にメモリーを取る)とくらべて
パフォーマンスが落ちる可能性があるとは言われている。
- 652 :651:2009/10/29(木) 02:15:09
- 書き方が悪かった。
POINTERにALLOCATEしたときは連続にメモリーを取るだろうが、
POINTERには、ストライド付きのとびとびメモリーを指示させることもできるので、
最適化には制限が係ることがあるようである。
- 653 :デフォルトの名無しさん:2009/10/29(木) 10:15:13
- >>651,652
なる〜。Fortran77で
i=10000
call hairetu(i)
subroutine hairetu(i)
integer i
real data(i)
みたいな使い方で任意の大きさの配列data()をサブルーチン内で扱えるけど、
これがメモリ上でキチンと並んでいるとは限らない(とんだ部分
の取り扱いはOSがするのか?)からね。
77より後のallocatable属性は、出来るだけ連続して確保してね、の
おなじないというか願掛けと思えばいいのだろうな。
- 654 :デフォルトの名無しさん:2009/10/29(木) 10:49:44
- http://codepad.org/lbdDTMLE
moduleが使う変数や関数、サブルーチンを外部から指定したいのですが可能でしょうか?上のコードは間違ってますが雰囲気を掴んでもらえたらいいかなと思い載せました
- 655 :デフォルトの名無しさん:2009/10/29(木) 21:41:04
- >>651
じゃあもうallocate使わない理由はないな
コードも綺麗になるしな
- 656 :デフォルトの名無しさん:2009/11/02(月) 01:28:57
- FORTRAN2008では、メモリー連続を保障する contiguous の属性が導入されるようだ。
まだ2003も碌にコンパイラが無い時点で言っても鬼も大笑いだが。
- 657 :デフォルトの名無しさん:2009/11/02(月) 01:52:59
- >>653
FORTRAN95/2003 Explained 20.2.1 p.331
"A non-pointer array occupies a sequence of contiguous storage sequences 云々"
とあるので、ALLOCATABLE 配列や AUTOMATIC 配列は、連続メモリーが保障されているんじゃないかな。
- 658 :デフォルトの名無しさん:2009/11/02(月) 06:43:35
- 英語をみると、連続した”複数の”保存領域を数珠つなぎに占有する、だけど、
まあ、自動配列も連続したメモリに確保しようとAllocateの時と同じ程度の努力はするよん、ということか。
配列全部が”一つの”連続したメモリ空間に収まるかどうかは、その瞬間のメモリ使用状況によるんだろうな。
大きめの計算機だと、一つのマシンではOSやI/O以外の部分は排他的に使えるから問題は少ないのだろう
といってみるテスト。
- 659 :デフォルトの名無しさん:2009/11/02(月) 11:58:03
- >>658
いや、完全にひとつの連続したメモリー領域なんで内科医?
努力義務ではなくて、必須義務だと思う。
- 660 :デフォルトの名無しさん:2009/11/03(火) 19:38:25
- というか、contiguous と sequenceって意味的に似てるよなw
もう少し明確に書いて欲しいもんだ(書いてるのかもしれんが)
- 661 :デフォルトの名無しさん:2009/11/04(水) 03:39:24
- ・・・べっ別にあんたのために連続したメモリ領域を確保してるわけじゃないんだからね、
といったところか。努力はするしアテにしてくれてもいいけど、絶対じゃないぞなもし。
- 662 :デフォルトの名無しさん:2009/11/04(水) 04:25:42
- フォートランってフォーミュラ・トランスフォーマーっていうくらいだから、
科学計算以外には向いていないのか?
- 663 :デフォルトの名無しさん:2009/11/04(水) 07:40:31
- 大昔は、他に言語がなかったから、なんでもFortranで書いてた。
現在では、向いてる向いてない以前に、言語として古い。
- 664 :デフォルトの名無しさん:2009/11/04(水) 12:39:17
- そういえばなんでトランスフォーマーなんだろう
数式を変形せずになるべくそのままの書き方でコードにできるのが
Fortranのメリットだったはずなのに。
今では使っちゃいけないとされる文関数なんてモロその名残だよね。
- 665 :デフォルトの名無しさん:2009/11/04(水) 12:56:16
- >>663
古いゆえにコンパイラもライブラリも枯れていて、まずバグはない
最適化も一番今の所進んでいる
というわけで信頼性と速度が要求される局面で現在も使われているわけだ
- 666 :デフォルトの名無しさん:2009/11/04(水) 13:02:36
- トランスフォーマーじゃなくてトランスレータだぜ。
FORTRAN以前は演算式もアセンブリで書かなければならなかった、
数式そのものでプログラムを記述出来る事は画期的だったんだよ。
- 667 :デフォルトの名無しさん:2009/11/04(水) 13:47:03
- = で代入、という規則をプログラミングの世界に普及させてしまった
張本人でもあるな。
- 668 :デフォルトの名無しさん:2009/11/04(水) 17:57:51
- .eq.とか.and.とか使えるのはCよりも好き
- 669 :デフォルトの名無しさん:2009/11/04(水) 20:30:22
- C++も and や or 使えるわい
- 670 :デフォルトの名無しさん:2009/11/04(水) 20:50:32
- >>668
.eq.は==のほうが見やすくない?
.and.と.or.も早く&&と||が使えるようになって欲しいわ
- 671 :デフォルトの名無しさん:2009/11/05(木) 00:25:28
- .EQ. はともかく .AND. とか .OR. は変な記号より文字の方がわかりやすいと思うがなぁ
- 672 :デフォルトの名無しさん:2009/11/05(木) 01:44:31
- >>671
賛成。
等号不等号は数学記号のほうがいいが、.AND. .OR. はこっちのほうがいい。
&&、||は見てくれからしてイマイチ。
歴史的にもEBCDICに無い記号だから、FORTRANに入ろうはずも無かった。
APL端末使えばいいのかも知れんがw
- 673 :デフォルトの名無しさん:2009/11/05(木) 05:16:55
- コンマが
10進数浮動小数点の小数点、理論演算子の飾り、structureの区切り
で使われるからメンドイw。
目の慣れだろうな。自分は .AND. .OR. の方がみやすいけど。
スペース無しだとみにくいけど。
- 674 :デフォルトの名無しさん:2009/11/05(木) 13:53:38
- >>671,672
これはもう好みの問題だろうなぁ。
自分は記号のほうが、英数字に対して違いが際立つんで好きだな。
あと、文字数が少ないのもいい。.AND.は5文字もあるし。
>>673
>10進数浮動小数点の小数点、理論演算子の飾り
揚げ足じゃないが、これはコンマじゃなくてピリオドじゃ
- 675 :デフォルトの名無しさん:2009/11/05(木) 14:16:56
- >>674
C言語は特殊事情があるんだよ
史上最も記号が多い言語はAPLで、未だにこの言語を超えるものは
出ていないが、第二位にC言語となっている(今はC++)
C言語はとにかく予約語をできるだけ減らしたくて、多くのワードを記号に
したと言われている
そのためC言語の予約語はわずか32個しかない
C++はCより記号が多いにも関わらず予約語はかえって増えた
C++0xでは更に増える
- 676 :デフォルトの名無しさん:2009/11/05(木) 17:40:23
- そりゃ言語に機能をてんこもりにしてるんだから
記号も予約語も増えるよなぁ
FortlessはUnicodeで演算子を定義できるらしいから、もしかしたら使える記号の
数ではAPLを越えるかもw
- 677 :デフォルトの名無しさん:2009/11/05(木) 17:41:11
- Fortressだったorz
- 678 :デフォルトの名無しさん:2009/11/05(木) 19:23:08
- Fortressは死んだんじゃなかった?
Sun・・・(´;ω;`)ブワッ
- 679 :デフォルトの名無しさん:2009/11/05(木) 19:28:56
- Guy Steele が blog 始めたりとかしてるけど...
ttp://projectfortress.sun.com/Projects/Community/blog
- 680 :デフォルトの名無しさん:2009/11/06(金) 02:10:17
- >>675
そういわれるとFortranは0-9,a-Z以外に使う文字は少ないね。
{}[]@^_%~`;<>?|\ は使わないでも済むね。[]%\ は使う状況はあるけど代替があるし。
固定書式で継続行に使うとかしないと使わない文字が多い。
$は微妙。規格外だけどたまに使う。#はプリプロセスしてれば使うなけど標準ではないな。
- 681 :デフォルトの名無しさん:2009/11/06(金) 08:04:00
- だからEBCDICだと
- 682 :デフォルトの名無しさん:2009/11/06(金) 11:19:25
- >>680
ASCIIコードを使ってるのは、ミニコンとかWSとかパソコンとかしょぼいマシンだけだったんだよ。
F90の規格に、やたらと固有文字コードとASCIIコード変換とかあるのはそのため。
小文字が端末から使えないことも多かったし。
数値フォーマットもバラバラだったから、数値の基数や有効ビット数を尋ねる関数もそろってる。
- 683 :デフォルトの名無しさん:2009/11/06(金) 12:09:53
- >>682
System/360にもASCIIとの切り替えスイッチは付いてたんだけどなw
- 684 :デフォルトの名無しさん:2009/11/06(金) 12:19:22
- >>683
そうなのかwww
- 685 :デフォルトの名無しさん:2009/11/07(土) 02:57:41
- ぱっとキーボードをみて・・・必須なのは
0-9 A-Z .,()=+-*/'
だけか。見落としなければ46文字。Spaceが必須でないところがなんともイカす。
使われる文字数が少ないのはパンチカード時代があるからだろうな。
Viで編集しやすいわけだw
- 686 :デフォルトの名無しさん:2009/11/07(土) 08:52:27
- C言語だってパンチカード時代に設計されたんだよ
scanf()なんてあれはパンチカード時代の名残
とにかくタイプ量を減らしたくて多くの予約語を演算子に変えた
- 687 :デフォルトの名無しさん:2009/11/07(土) 10:01:38
- それは違う。printfやscanfは、Fortran用のランタイムルーチンを流用したなごり。
C言語の発祥は主にミニコン文化圏で、パンチカードじゃなく、紙テープとテレタイプが主流。
記号だってEBCDICにないものを多用するし(そのせいでトライグラフなんてものも
できたりしたがw)
- 688 :デフォルトの名無しさん:2009/11/09(月) 03:54:20
- creat(笑)
- 689 :デフォルトの名無しさん:2009/11/09(月) 09:36:45
- >>685
機能の代替がない、という点では:の添字範囲指定もかな、ってあれ
1以外から範囲指定可なのはF77でも出来たっけ?
- 690 :デフォルトの名無しさん:2009/11/09(月) 09:37:57
- 標準の機能として、という意味ね。
- 691 :デフォルトの名無しさん:2009/11/09(月) 23:59:27
- >>689
77では配列の宣言のところだけだったか、文字列では部分文字列の指定に使えた。
あとフォーマットでもコロンが使えたはず。
- 692 :デフォルトの名無しさん:2009/11/11(水) 02:45:21
- character*7 mojiretu
mojiretu = 'smtwtfs'
write(*,*) mojiretu
mojiretu(2:6) = 'sssss'
write(*,*) mojiretu
みたいな使い方の事だね。規格が30年くらい前だけど、その後のベクトル表現の匂いがする。
そういう文字列取扱いの需要があったからだろうけど、先をいってたんだな・・・たぶん。
フォーマット中の例が思いつかなかった。
230 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
取りに行ったけどなかった。次は一時間後に取りに行くです。新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)