くだすれFORTRAN(超初心者用)その4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/01/24(土) 18:32:01もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。
●前スレ
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
●関連スレ
FORTRAN �W
http://pc11.2ch.net/test/read.cgi/tech/1163319215/
0696デフォルトの名無しさん
2009/11/05(木) 05:21:56でも命令文はF77~95の混在したコードになってもうた。プリプロセスも混ぜてるから拡張子は.fppだ。
まあでも、gfortran と intel fortran はちゃんと処理してくれるから、いいや。
FujitsuのもOKみたいだし。
無駄に行数が増えてしまうけど左側が空いてるとなんか安心するw
0697デフォルトの名無しさん
2009/11/05(木) 14:12:15ありがとうございます。
F95で書こうと思います。
0698デフォルトの名無しさん
2009/11/06(金) 02:03:35少ないように規格されてるから過去の資源も使い易いし。
2003でスコープ範囲指定が出来るようになるらしいけど、いつ出るんだろう?
まだ見たことないや。
0699デフォルトの名無しさん
2009/11/06(金) 15:29:10昔はIBM、日立、富士通、Sun、SGIって色々あったけど、今はそれらは
ほとんど淘汰されてスパコンレベルしか残ってないし。
ま、コードを開発する側としてはやりやすくなったんだろうけど。
0700デフォルトの名無しさん
2009/11/07(土) 00:55:13>2003でスコープ範囲指定が出来るようになるらしいけど、いつ出るんだろう?
>まだ見たことないや。
変数のスコープか?
PRIVATE、PUBLICは今あるままで、PROTECTED(いわゆるリードオンリー)が加わる程度だと思ったぞ。
他にもあんのかな?
0701デフォルトの名無しさん
2009/11/10(火) 09:26:510702デフォルトの名無しさん
2009/11/12(木) 13:05:370703デフォルトの名無しさん
2009/11/12(木) 23:57:09おまえふざけてんのか?w
0704デフォルトの名無しさん
2009/11/13(金) 03:32:540705デフォルトの名無しさん
2009/11/13(金) 08:15:170706デフォルトの名無しさん
2009/11/13(金) 13:00:36両方ともマヨネーズならアリだよな
0707デフォルトの名無しさん
2009/11/13(金) 13:04:07え?
0708デフォルトの名無しさん
2009/11/14(土) 09:03:120709デフォルトの名無しさん
2009/11/14(土) 16:44:02Quiche Eaterはマヨネーズを使う。
0710デフォルトの名無しさん
2009/11/18(水) 19:18:00割り付け配列って何ですか?
0711710
2009/11/18(水) 19:33:35どこを変更すればいいのですか?
program matrix_wa
implicit none
integer::N,I,J
integer,parameter::IDIM=100
real(8),DIMENSION(IDIM,IDIM)::A,B,C
!
write(*,*) 'INPUT MATRIX DIMENSION'
read(*,*) N
write(*,*) 'INPUT MATRIX ELEMENTS OF A'
do I=1,N
read(*,*) (A(I,J),J=1,N)
enddo
write(*,*)'INPUT MATRIX ELEMENTS OF B'
do I=1,N
read(*,*) (B(I,J),J=1,N)
end do
CALL MATADD(IDIM,N,A,B,C)
CALL MATOUT(IDIM,N,C)
stop
end program matrix_wa
0712デフォルトの名無しさん
2009/11/18(水) 19:34:17SUBROUTINE MATOUT(IDIM,N,X)
!=============================================
implicit none
integer IDIM,N,I,J
real(8),DIMENSION(IDIM,IDIM)::X
write(*,*)'C='
do I=1,N
write(*,*) (X(I,J),J=1,N)
end do
return
end subroutine MATOUT
!===============================================
SUBROUTINE MATADD(IDIM,N,A,B,C)
!=============================================
implicit none
integer::IDIM,N,I,J
real(8),DIMENSION(IDIM,IDIM)::A,B,C
DO I=1,N
do J=1,N
C(I,J)=A(I,J)+B(I,J)
end do
end do
write(*,*) 'C='
do I=1,N
write(*,*) (C(I,J),J=1,N)
end do
return
end subroutine MATADD
0713デフォルトの名無しさん
2009/11/21(土) 10:18:393つの物理量の実測(とびとびのデータ)からある答えの物理量
がわかるデータがあるとき、
3つの物理量がある入力値の場合の答えの物理量を出すときに、
データの線形補完をしたいのですが
そういうやり方とかないでしょうか
0714デフォルトの名無しさん
2009/11/21(土) 12:07:51言いたいことがよく分からないのだけど、補完みたいなことをしたいの?
0715デフォルトの名無しさん
2009/11/21(土) 21:21:330716デフォルトの名無しさん
2009/11/21(土) 21:25:40最小二乗法とか?
0717デフォルトの名無しさん
2009/11/22(日) 00:11:48ありがとうございます。
あまりうまく伝えられなくて申し訳ないです。。
詳しくないのですが多分回帰の範囲と思います
3変数から一つの解を出す方法なのですが、
データから多項式で式が一発で出せるようなのがあればいいのですが、
そういうのはないでしょうか。。
0718デフォルトの名無しさん
2009/11/22(日) 02:38:52前者ならR言語が使えるらしい。
0719デフォルトの名無しさん
2009/11/22(日) 12:13:04y=a*x1 + b*x2 + c*x3
のような式において、x1、x2、x3、yのリストから係数a、b、cを
導きたいなら、Excelの関数で1発でできる。重回帰分析でググれ。
0720デフォルトの名無しさん
2009/11/22(日) 12:48:30> データの線形補完をしたいのですが
最小二乗法使っとけ。
線型でいいということは測定できる変数x、y、z とそれらから分かる量wの間に
w = a*x + b*y + c*z
という関係があると仮定できるってことでしょ?で、係数a、b、cは分かんない。
この分かってない係数を測定データから決定することで、測定データの中には無
いx、y、zの組のときにwがどんな値になるかを知りたいのだと邪推してみる。
>>713 の頭の中を覗けるわけではないので間違ったこと言ってるかもしれんけど。
それをどうしてもFortranで書かなければならないのなら仕方が無いが、そうでも
なければ >>718 が言うように R でも何でも使ってればいい。
でも最小二乗法ならwのデータも要るのか?元質問だとwは測定して無いっぽいな。
こういうときはどうすんだ?
元質問がグダグダなので無責任に色々と言い放ってみた。グダグダじゃなくても
責任ある発言なんてできないけど。
0721デフォルトの名無しさん
2009/11/23(月) 15:09:24NAG Fortran Builder 5.2 と Intel Visual Fortran 11.1 日本語版の
どちらにしようか迷っています。すみませんが,以下の疑問それぞれに
ついて判るかた,教えてください。
【1】 以下の項目について,どちらが優れているのでしょうか?
(A) コンパイルしてできた実行ファイルの処理速度の速さ
(B) 開発環境の使い勝手の良さ(入力補完など)
【2】 Intel Visual Fortran でも NAG Fortran Builder のように
GUI アプリケーションが作れるのでしょうか?
【3】 Intel Visual Fortran と NAG Fortran Builder の2つ以外に
日本語版の Fortran 95 コンパイラはあるのでしょうか?
なお,私のパソコンは,
Windows が XP Home Edition SP3,
CPU が Intel Pentium 4 (2.40GHz),
RAM が 512MB です。
0722デフォルトの名無しさん
2009/11/25(水) 01:19:251) (A)処理速度で言うならIntel。NAGは文法的な厳格さ、厳密さが売りで速度は二の次。
(B)Intelの統合環境はMSのVisualStudioで、入力補完などは無い。シンタックスカラーリング程度?
VS2010あたりで色々対応したいと言うようなことは言っているが未定。
NAGの方は独自の統合環境で、こちらもシンタックスカラーリング程度だったような。
Fortranの入力補完は、ほとんど存在しない。
昔の(10年以上前の)LaheyについてきたWin3.1時代風のEDくらいか。
Polyhedron社が今のLahey用にVisualStudioの拡張を売っていたような気もするが詳しくは分からん。
Laheyのサイトを見てくれ。
2.IVFでのGUIは、Win3.0時代から続くQuickWin互換の初歩的なものと、Win32APIを直接叩く方式がある。
サンプルプログラムが提供されているが、Fortranの呼び出し規約とCの呼び出し規約が違うので
Win32APIに習熟しているとともに、呼び出し規約等に惑わされない必要があって、理解が困難。
OpenGLで絵を描くだけならサンプルの改造で済むのでまだやさしい。
3.日本語版があるかは知らないが、Winで動くものとしては
有料 商用
・CUDAに対応するなどアグレッシブなPGIのFortran。
・富士通とコンパチなLahey-Fujitsu Fortran (.Net対応とか、SSLライブラリがある)
・MacやCrayとの親和性が売りだったAbsoft Fortran (今はその利点もあまり無いが)
無料系
・広告がうざいが、ただで使えるのがSilverFrostのFTN95。(商用は.Net 対応らしい)
・GNU系がよければ、g95 または gfortran. (この二つは同じ先祖から分かれた別物)
参考:非Win
*FreeのSUN OS上でよければ、SUNのFrotran95もただで使える。
*Linux上なら Intel Frotranが学術目的ならただで使える。
0723デフォルトの名無しさん
2009/11/25(水) 01:47:53なつかしす。結局コレで遊んだ以外はコマンドラインでしか使わなかったな・・・
もっとも自分の古いマシンに乗ってるのは DEC のVisual Fortran だけど、まあ同じようなものだからいいか。
0724デフォルトの名無しさん
2009/11/25(水) 01:53:34QQで始まるGUIその他用の拡張命令サブルーチンが一杯あって訳わからんかったなぁw
GUIアプリ作るときには do while ..... enddo でコード全体を無限ループで囲む、
アプリ終了=ループ脱出はwhile()内に来る条件のフラグをいじる、だったような。
Fortran 文法に可能な限り沿いながらGUIアプリに必須な
マウス操作とかのいつ起こるか未然にわからないアクションを扱う苦悩が味わえたw
0726デフォルトの名無しさん
2009/11/26(木) 01:17:03基本的に割り込み処理ののりだよな。
BASIC全盛時代のINKEY$でリアルタイム・キー入力処理を書いているようなもの。
0727デフォルトの名無しさん
2009/11/26(木) 05:07:03そうそう、そんな感じw
>>721
メモリ少なくね?
0728デフォルトの名無しさん
2009/11/27(金) 10:11:01正確には純粋な私用ならタダ、ね。学生がFortranやCで遊ぶだけならLinux版はタダだけど、
それを論文にしたり研究発表で使うデータ計算に使うのならちゃんと有償版を買わないといけない・・ハズ。
まあ、いまのところはIntel自身もあまりねちねちチェックしてないけど、
将来Intelの気が変わるとややこしいことになる大学や研究室や個人は多いと思われる。
小さいメーカとか10万円をけちって将来の生殺与奪の権をIntelに捧げてるところは多いのでは?
0729デフォルトの名無しさん
2009/11/27(金) 10:49:02"アンダーフローは 0.0 にする。他の IEEE 例外は異常終了する (/fpe:0)"にしてます。
以下の行で、floating invalid を吐いて計算が止まります。変数は全て暗黙の型宣言です。
time=time*(xa-xb)/dx
ちなみに直前でそれぞれの中身を表示したところ、
time=5.0E-07
xa=0.5368819
xb=0.5368840
dx=-2.0805840E-06
でした。
上の値はかなり長い計算の途中で出てくるので、手っ取り早く原因を探ろうと、
直前に上の数値を強制的に書き込んで回してみましたが再現しません(止まりません)。
floating invalidが上記の計算の行で起きているのはエラーメッセージのLineから明らかです。
正直意味不明過ぎて何を言ってるのか分からないかもしれませんが、何か
原因に思い当たること、もしくは他に何か必要な情報があれば教えていただけないでしょうか?
0730デフォルトの名無しさん
2009/11/28(土) 05:56:58あとは・・・・規格化(無次元化)する際の典型量を見直す、とか。
系全体の長さを1にするのではなく、関心のある現象の空間的なひろがりを1にとるとか。
0731デフォルトの名無しさん
2009/11/28(土) 09:38:430732デフォルトの名無しさん
2009/11/28(土) 10:07:56キミに「プログラムは書かれいる通りに動く」という格言を進呈しよう。
とても高い確率でキミが何処かで間違えている。
0733デフォルトの名無しさん
2009/11/28(土) 10:23:59一般論として考えた場合は負でも問題無い。というのは飽くまでも或る点からのズレ(変位)という意味し
かないから。
プログラムの中で何らかの約束がある場合には、その約束のために正の値でなければならないことはあるだ
ろう。そういう時に負になってしまうのはバグでしょ。その場合はプログラムを書いた人の検討不足かタイ
プミスかだ。デバッグができていないんだろう。他の理由もあるんだろうけど思いつかん。
0734デフォルトの名無しさん
2009/11/28(土) 10:44:21> ちなみに直前でそれぞれの中身を表示したところ、
これは本当に直前なのか? 正常に動く一回前の値じゃないのか?
0735デフォルトの名無しさん
2009/11/28(土) 19:56:50多分、ただのゼロ割だろう。
Intelのコンパイラのバージョンはいくつかな?
新しい奴ならNaNにして続行するが、8.1とか古い奴はFloating Invalidで即死する。
状況的には>>734の言っていることが正しいであろう。
0736デフォルトの名無しさん
2009/11/29(日) 10:33:12倍精度は文字どおり精度を上げるのに有効だけど・・・
単精度でコケて倍精度で動く奴は、モデルを間違えてるかコードがおかしいかのどちらかだから
根本的には解決にならないね。
0737デフォルトの名無しさん
2009/11/29(日) 12:05:49アルゴリズム/コードに代える方がまっとうな道。
0738729
2009/11/29(日) 13:14:09>>730
実は無次元化してません…
>>731
733が仰ってますが、単に変位です。負値は大丈夫です。
>>732
もちろんそうなんですが、どこで間違えてるのか分からなくて。
>>734
計算の一行前にwrite文で表示させてるので一回前の値と言うことはないはずなんですが、
この値で止まるのも同程度におかしいので何か間違えてるんだと思います。
>>735
ver.11です。デフォだとNaNで続行されますけど、NaNだと粒子が行方不明になってしまって困るので
トラップして原因を突き止めようとしてるのです。開放系ならごく稀に粒子が居なくなるくらいは問題ないんですが、
閉鎖系だと粒子がどんどん減ってしまうので…
>>737
こういう問題が発生しないアルゴリズムってどういうものでしょうか?原理的に発生しないんですか?
今自分で思いつくところだとNaNを検出して適当な座標を振りなおしてやるくらいしか思いつかないんですが…
ちなみにゼロ割した場合、floating invalidじゃなくてfloating divide by zeroとでました。分子も0だと
floating invalidになるのでこっちなんでしょうか?まだ不可解なところがあるのでもう少し見直してみます。
0739デフォルトの名無しさん
2009/11/29(日) 19:58:08デバッガで調べた方が良い。
0740デフォルトの名無しさん
2009/11/29(日) 20:15:31じゃ、出力先をファイルか標準エラー出力に切り替えてみるのもありだな。
そんで結果を見る。デバッガなんて使いこなすまでに時間が掛かりそうだし。
0741デフォルトの名無しさん
2009/11/30(月) 00:05:11もうひとつの可能性:
floating invalidは表示ルーチンで出ている。
0742デフォルトの名無しさん
2009/11/30(月) 00:27:10あとの安直な手は別のコンパイラで実行してみることかな。
g95あたりで一回やってみればいいのでは。
0743デフォルトの名無しさん
2009/11/30(月) 06:49:04バッファリングの半分は嘘のデータで出来てます。
あとは・・・Write 文つかったデバッグの場合でかつ元のをUnrollingしていると
Write文挿入する・しないで演算順序が変わることがあるから
UnrollingやできればInlineを抑制したコンパイルをすることをお薦めしてみるテスト
0744デフォルトの名無しさん
2009/12/01(火) 05:51:21*
***
*****
*******
を描けという問題で、1.2.3行目のスペースの出し方がわかりません・・・
$を使えばできるのかと思いましたが、わかりません
どなたか教えていただけないでしょうか?
0746デフォルトの名無しさん
2009/12/01(火) 06:14:43do n = 1, 7
if (n .GE. (5-i)) .AND. (n .LE. (3+i))
write(*,'(A,$)') '*'
else
write(*,'(A,$)') ' '
enddo
enddo
write(*,'(A)') ''
enddo
かな?
0747デフォルトの名無しさん
2009/12/01(火) 06:15:40enddo -> endif
にしとかんといかんかったね
0749デフォルトの名無しさん
2009/12/01(火) 09:47:59if の行に then がなかったりしたけど、
えがったえがった
0750デフォルトの名無しさん
2009/12/01(火) 23:10:571000以下の整数のうち、7で割ると2余る数を全て合計するプログラムをつくりたいのですがわかりません…
どなたか教えてください。
0751デフォルトの名無しさん
2009/12/01(火) 23:16:50integer i, s, n
n = 1000
s = 0
do i = 1, n, 1
s = s + i
end do
write(*,*)'sum =',s
続きは誰かヨロ。みんなで完成させようぜ。
0752デフォルトの名無しさん
2009/12/02(水) 03:44:10s = s + i
write(*,*) i, s
endif
途中経過表示はいらないけどね。
0753sage
2009/12/02(水) 07:28:33ありがとうございます。
本当に助かりました
自分でやったのでは実行できなかったので;;
また機会があればよろしくお願いします。
0754デフォルトの名無しさん
2009/12/03(木) 13:16:46最小二乗法のプログラム(放物線近似)をつくっているのですが、
"dot_product"文がうまく使えません。
実行すると下記のようなエラーが出ます。
x4 = dot_product(x2,x2)
1
Error: 'vector_a' argument of 'dot_product' intrinsic at (1) must be of rank 1
In file test02.f90:28
x4 = dot_product(x2,x2)
1
Error: Function 'dot_product' at (1) has no implicit type
長くなりますが↓にプログラムを貼ります。
0755デフォルトの名無しさん
2009/12/03(木) 13:20:29implicit none
real(8)::a,b,x,y,y_b,xi,x2,yi,y2,xy,d,x4,x2y
integer::n,i
allocatable x(:), y(:), y_b(:)
write (*,*) 'input number of data '
read (*,*) n ! input size of dimension
write (*,*) 'number of data is ',n
allocate (x(n),y(n),y_b(n))
!-------------------------
do i = 1,n
read(*,*) x(i), y(i)
write(*,*) x(i), y(i)
end do
!------------------
xi = sum(x); x2 = dot_product(x,x)
yi = sum(y); xy = dot_product(x,y)
x4 = dot_product(x2,x2)
x2y= dot_product(x2,y)
d = n*x4-x2**2
a = ( n *x2y - x2*yi ) / d
b = ( x4*yi - x2*x2y ) / d
write (*,'(1x,2(3x,a,f7.3))') 'a =',a,'b =',b
write (*,'(a8,a9,a10,a11)') 'x','y','y_b','dif'
end program saishou
0756デフォルトの名無しさん
2009/12/03(木) 13:45:03x2はスカラーなので引数にできないですよ。
ちなみにdot_productが返すのはベクトルの内積を求めるので、戻り値はスカラー。
・・・とfortran歴1年の俺がいってみる
0757デフォルトの名無しさん
2009/12/03(木) 14:29:43ベクトル化などの高速化・最適化を妨げるリスクはないと思っていいよね?
それとも、doループをいちいち書いた方がやっぱり速くなったりする?
0758デフォルトの名無しさん
2009/12/03(木) 21:10:12彗星の軌道をプログラミングしたいのですが上手くいきません
どこがおかしいか教えてくださいませんか?
program main
integer i,j
real ms,me,x,y,vx,vy,t,dt,G
ms=1.989*(10**30)
dt=100
G=6.673*(10**(-11))
K=G*ms/R**2
x=0.8826*(10**(11))
y=0.0
R=sqrt(x**2+y**2)
vx=0.0
vy=55000
do i=0,1000
x=x+vx*dt*i
y=y+vy*dt*i
R=sqrt(x**2+y**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
write(6,*) x,y
enddo
end
0759デフォルトの名無しさん
2009/12/03(木) 21:42:09なるほど・・・ご指摘ありがとうございます。
では行列の4乗はどう書けばよいのでしょうか。。
0760デフォルトの名無しさん
2009/12/03(木) 22:15:52そういうサブルーチンを自作すれば良い。幸いなことにFortran90からは再帰も使えるしね!
0761デフォルトの名無しさん
2009/12/03(木) 23:25:57xnext=x+vx*dt*i
ynext=y+vy*dt*i
R=sqrt(xnext**2+ynext**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
write(6,*) x,y
x=xnext
y=ynext
vx,vyはdtずらす前のx,yを使うのがオイラー法の正しいやり方ですよ。
これだけで直るかは自信がありませんが。
0762デフォルトの名無しさん
2009/12/04(金) 00:45:27どなたか本当にお願いします。
Zは3×3の行列で、V、Z、Iの各要素は複素数とするそうです。
確かに複素数を扱うにはCよりはフォートランだとは思うのですが…
[V1] [Z11 Z12 Z13] [I1]
[V2]= [Z21 Z22 Z23] [I2]
[V3] [Z31 Z32 Z33] [I3]
よろしくお願いします。
0763デフォルトの名無しさん
2009/12/04(金) 02:27:53たぶん弊害はない。たぶん、なのは実装によるので。ベクトルがでかくなると、
出来合いのルーチンの方が速いね。そういうチューンしてると期待していいとおもう。
3次元くらいだったら自分でループ書くか、
naiseki=a(1)*b(1)+a(2)*b(2)+a(3)*b(3)
みたく成分を明示したほうがいいことがおおいけど。
0764デフォルトの名無しさん
2009/12/04(金) 02:29:50複素数扱うならFortranのがいいよ。
んで、3x3行列なら (-1)^(i+j) * (小行列の行列式)_{j,i}/(全体の行列式)
を明示した方がいいよ。
0765デフォルトの名無しさん
2009/12/04(金) 11:04:54thx
そのうち自分で試してみようかな
0766デフォルトの名無しさん
2009/12/04(金) 19:50:53もちろん中身を読み込んで新しいファイルに書き込むなら出来ますが、
cat みたいな感覚で使える命令ってあるでしょうか?
0767デフォルトの名無しさん
2009/12/04(金) 23:14:56system() を使って cat で繋げるとか?
Fortranが内部で持っている方法は聞いた事が無いです。
0768デフォルトの名無しさん
2009/12/04(金) 23:47:25G=6.673*(10**(-11))
この辺は
G=6.673E-11
とするべし。
あと77なのか90なのか判然としないが、暗黙の型を破る気ならIMPLICIT NONEを
つけておくほうが吉。
>>766
catだって中では読んで書き出しているだけだろうに
0769デフォルトの名無しさん
2009/12/04(金) 23:54:43> >>766
> catだって中では読んで書き出しているだけだろうに
そういえばバイナリファイルをformattedで開く場合ってケッコウ難儀なことになりそうな気がして来た。
catはその辺はクリアしてるけど(でないとバイナリファイルの結合なんて出来ないよね?)。
自分だったらfortranでやらずにシェルでも書いてそっちで済ます。WindowsならPerlか何かを使うかな?
dosのコマンドで出来たっけ?やりたいことによって道具を使い分けるのが良いと思うけど。
0770デフォルトの名無しさん
2009/12/05(土) 00:05:00catと等価な、つまりバイナリレベルでの結合は無理じゃない?
fortranって、せいぜいレコードを扱うくらいで、バイトレベルでの操作は普通しないし、そもそもできないと思うけど
0771デフォルトの名無しさん
2009/12/05(土) 03:50:13追記するデータを別なファイルから読み込む段階でコケる事多々アリで面倒だよね。
Bit 単位での操作って Fortranで出来ない&やりにくい典型例だ。
0772デフォルトの名無しさん
2009/12/05(土) 05:12:47ファイルはレコードの集合という考え方をするから、
前提のないバイト列は扱いにくい。
0773デフォルトの名無しさん
2009/12/05(土) 05:57:03program main
print *, 'Hello World !'
stop
end
のクイック実行のコンパイル&リンクに12分50秒もかかります。
NAGのコンパイラはこういうものなんでしょうか?
それとも,もっと早くコンパイル&リンクのできる設定が何かあるのでしょうか?
私の環境は,OSはWindows XP,RAMは512MB,
HDDの空き領域は,Cドライブは706MB,Dドライブは1.92GB,
Fortran Builder は Dドライブにインストールしています。
# NAGの統合開発環境は,Intelのと違って,キーワード入力補完機能がありました。
0774デフォルトの名無しさん
2009/12/05(土) 10:00:550775デフォルトの名無しさん
2009/12/05(土) 10:02:09数字を規格化しようね
0776773
2009/12/05(土) 10:51:47NAGのホームページには 「メモリ:256MB以上(推奨 512MB以上)」 と
書いてあったので,大丈夫かなと思ったんですが,
やっぱり足りないですかね。
他に Fortran Builder 5.2 のユーザーさん,いませんか?
RAMはどれくらい積んでますか?
0777デフォルトの名無しさん
2009/12/05(土) 12:17:51キーワード補完だけじゃ、あってもなくてもほとんど変わらんよなぁ・・・
もっとリッチなFortranのIDEが早くでないものか
0778デフォルトの名無しさん
2009/12/05(土) 13:20:00その前に今どき512MBというのがなあ。増設はできないの?
0779773
2009/12/05(土) 13:38:40CPU: Pentium M 1.20GHz
RAM: 1GB
OS: Windows XP Pro. Ver.2002 SP3
これで
program hello
print *, 'Hello World'
stop
end program hello
をやってみたんですが,こちらのPCでもコンパイル&リンクに
12分25秒かかりました‥‥ orz
>>778
う〜ん,6年前のVAIOノートなんで,買い替えしたほうが良いかもしれません。
0780773
2009/12/05(土) 13:52:17RAM 1GB (2GB 推奨) と書いてあるんですが,
CPU: Pentium M 1.20GHz,RAM: 1GB のPCにインストールしても,
Fortran Builder と同じくコンパイル&リンクに10分くらい
時間かかっちゃうでしょうか?
0781デフォルトの名無しさん
2009/12/05(土) 14:01:23大量にスワップが発生しているせいなので、
一定量メモリを増やせば急に早くなるものだが、
512MBでもその有様とはすごいね。
fortran 77でよければ open watcom fortranとかいいんでない?
0782デフォルトの名無しさん
2009/12/05(土) 14:06:13まさかとは思うが、メモリの空きは大丈夫なんだよね?
動画のエンコしながらコンパイルとかはさすがにないだろうけどw
0783デフォルトの名無しさん
2009/12/05(土) 14:15:19IDEが重いのかもしれない。
0784デフォルトの名無しさん
2009/12/05(土) 14:20:090785773
2009/12/05(土) 16:01:16レスありがとうございます。>>783さんのレスを見て調べたら,
コマンドラインからコンパイルする方法が NAGのサイトの
FAQページに載っていました。
今度は数秒でコンパイルできました!
# しかも,できた実行ファイルのサイズが,IDEのときは 266KBだったのに対して,
コマンドラインからのときはわずか 18KBとずいぶん小さくなりました
ちなみに,g95でコンパイルしたときは 339KBでした。
本当にありがとうございました m(_ _)m
0786デフォルトの名無しさん
2009/12/05(土) 16:37:57でもそんな悪い評判は聞いたことないが・・・
0787デフォルトの名無しさん
2009/12/05(土) 17:25:08バイナリファイルも、F2003ならSTREAMファイルとしてあけることで扱える。
F2003以前でもベンダー拡張でSTREAMアクセスできることが多い。
また規格の範囲内でもDIRECTアクセス・ファイルの属性で代替できることがある。
(独自フォーマットのDirectFile形式のベンダーもあるが、垂れ流し的に書いているものも多いので、
実質ストリームとして使える)
ただFortranの規格ではレコード長が処理系依存なので、バイトかワードかが確定できない。
でもコンパイラのオプションで単位をバイトに指定出来ることが多い。
0788デフォルトの名無しさん
2009/12/05(土) 18:24:30それって単にランタイムDLLになっただけじゃ?
IDEの時はスタティックリンクなんでしょ
0789デフォルトの名無しさん
2009/12/05(土) 18:53:35IDE使ったことないんで分からないけど、そういうもんなのかね
でもスタティックリンクにしたら、サイズが増えるのはいいとして
10倍以上の時間がかかるなんて、あり得るの?
0790デフォルトの名無しさん
2009/12/06(日) 02:17:44それに実行ファイル自体が最適化がかかってないかもしれない
環境を聞かないと何とも堪えようがない
0791773
2009/12/06(日) 08:35:45> IDEの時はスタティックリンクなんでしょ
IDEの設定を見たら,おっしゃるとおりで,
「nagforランタイムライブラリの非共有(静的)バージョンを結合」
となっていました。ひとつ勉強になりました(汗)。
>>790
> 環境を聞かないと何とも堪えようがない
環境は……
【1つめのパソコン VAIOノート】
OS: Windows XP Home edition Ver.2002 SP3
RAM: 512MB
HDDの空き領域:Cドライブは 706MB,Dドライブは 1.92GB
Fortran Builder 5.2 は Dドライブにインストール。
【2つめのパソコン let's note ノート】
OS: Windows XP Professional edition Ver.2002 SP3
RAM: 1GB
CPU: Pentium M 1.20GHz
HDDの空き領域: Cドライブは数十GB
Fortran Builder 5.2 は Cドライブにインストール。
……です。
0792デフォルトの名無しさん
2009/12/06(日) 08:39:320793773
2009/12/06(日) 08:42:25Pentium 4 の 2.40GHzです。
0794デフォルトの名無しさん
2009/12/06(日) 19:59:53どなたか教えください。
[123] [13]
[ ]×[23]
[045] [46]
です。
わかりにくいのですが、2行3列と3行2列の乗算です。。
0795デフォルトの名無しさん
2009/12/06(日) 20:01:50[123] [13]
[ ]×[23]
[045] [46]
■ このスレッドは過去ログ倉庫に格納されています