このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。
●前スレ
くだすれFORTRAN(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1269704830/
●過去スレ
くだすれFORTRAN(超初心者用)その4
http://pc12.2ch.net/test/read.cgi/tech/1232789521/
くだすれ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(超初心者用)その6
■ このスレッドは過去ログ倉庫に格納されています
2012/08/16(木) 20:58:00.31
621デフォルトの名無しさん
2014/10/08(水) 00:58:36.59ID:9VdrGSON x(100)があるとして、計算しているのになぜか例えばx(40)から値が0になってしまいます
考えられる原因ないでしょうか
無茶ぶりですいません
考えられる原因ないでしょうか
無茶ぶりですいません
622デフォルトの名無しさん
2014/10/08(水) 01:09:28.89ID:fqHZeb8H さすがに無理
もう少しヒントをくれ玉へ
もう少しヒントをくれ玉へ
623デフォルトの名無しさん
2014/10/08(水) 07:15:04.02ID:90i0u9P7624デフォルトの名無しさん
2014/10/08(水) 08:00:58.16ID:99q9svOz 今時逝ってよしとかねえよ
625デフォルトの名無しさん
2014/10/08(水) 20:12:54.14ID:9VdrGSON626デフォルトの名無しさん
2014/10/09(木) 00:38:44.90ID:n00d9Wif627デフォルトの名無しさん
2014/10/09(木) 02:25:56.01ID:FBZt25be >>625
xが途中で変わってしまうなら
xの代入文や計算式が間違ってないか探す(特に範囲指定)
途中で変数を書き出し、変数の変化を追う
デバッガを使って変数に代入されるタイミングを調べる
くらいしか思い付かない
実は0になる計算をしていたなんてことはないよね
xが途中で変わってしまうなら
xの代入文や計算式が間違ってないか探す(特に範囲指定)
途中で変数を書き出し、変数の変化を追う
デバッガを使って変数に代入されるタイミングを調べる
くらいしか思い付かない
実は0になる計算をしていたなんてことはないよね
628デフォルトの名無しさん
2014/10/10(金) 03:19:01.38ID:OpKqoeIe まぁ大方書き込んだつもりになっているが、ループが39までしか回ってないという
パターンだろう。
初期値に1e38とかNaNとか書いておけばいい。
パターンだろう。
初期値に1e38とかNaNとか書いておけばいい。
629デフォルトの名無しさん
2014/10/11(土) 16:00:47.58ID:C1s+VS97 >逝ってよし
逝ってよし ってフレーズ最後に見たの何年前だろう?10年くらい前?
ちょっとクスッと来てしまった。
悪くないよ〜
逝ってよし ってフレーズ最後に見たの何年前だろう?10年くらい前?
ちょっとクスッと来てしまった。
悪くないよ〜
630デフォルトの名無しさん
2014/10/12(日) 11:19:06.43ID:Zy5yf7AD631デフォルトの名無しさん
2014/10/12(日) 22:43:53.80ID:q3BSJrqr gfortranで
call system(cd ..)
とやっても上のディレクトリに移動できません。
他のコマンドは動くのですが…
これは仕様なのでしょうか?
call system(cd ..)
とやっても上のディレクトリに移動できません。
他のコマンドは動くのですが…
これは仕様なのでしょうか?
632デフォルトの名無しさん
2014/10/13(月) 20:38:43.03ID:qvDo+/hC >>631
systemからのcd実行なら仕様。
別のshellが起動してcdを実行して処理を終了するので、呼び出しもとのshellとは無関係。
GNUならディレクトリを変更したい場合はCHDIRが使える。
systemからのcd実行なら仕様。
別のshellが起動してcdを実行して処理を終了するので、呼び出しもとのshellとは無関係。
GNUならディレクトリを変更したい場合はCHDIRが使える。
633デフォルトの名無しさん
2014/10/13(月) 21:42:58.17ID:BJqw9Buj634デフォルトの名無しさん
2014/10/14(火) 10:25:49.65ID:gGwwURe/ とか言って失敗しましたw CHDIRをつかうとshからpremission deniedと怒られます。
if (IPTCMD(1:3).eq.'cd ') then
DSTDIR=IPTCMD(4:)
call CHDIR(DSTDIR)
end if
のようなコードです。SELinuxのせいかと思いましたが違いました。
ご教示いただければ幸いです。
if (IPTCMD(1:3).eq.'cd ') then
DSTDIR=IPTCMD(4:)
call CHDIR(DSTDIR)
end if
のようなコードです。SELinuxのせいかと思いましたが違いました。
ご教示いただければ幸いです。
635デフォルトの名無しさん
2014/10/14(火) 10:53:43.84ID:gGwwURe/ 追加すると、cdコマンドは成功しています。でも、
sh: 1: ..: Permission denied
と怒られますw
sh: 1: ..: Permission denied
と怒られますw
636デフォルトの名無しさん
2014/10/17(金) 08:36:55.32ID:/3IlFIL9 素朴な疑問なんですが
write( *,101) n
write(10,101) n
こういう式って一行にまとめられないんですか
write( *,101) n
write(10,101) n
こういう式って一行にまとめられないんですか
637デフォルトの名無しさん
2014/10/17(金) 14:01:54.72ID:5NvG3gNF >>636
write ... ; write ,,,
write ... ; write ,,,
638デフォルトの名無しさん
2014/10/18(土) 03:21:07.25ID:1z7UQB1P 言い換えます
write( *,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 10,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 11,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
みたいな文を一行でまとめたいのです
write(10,101) n
write( *,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 10,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 11,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
みたいな文を一行でまとめたいのです
write(10,101) n
639デフォルトの名無しさん
2014/10/18(土) 04:32:28.37ID:pf8oYVZE 10,11だと外部ファイルか
それだと複数の装置番号に同時に出力する方法はない(0以上のスカラーでなければならない)
変数をまとめたいなら配列nにa-zを代入すればできる
それだと複数の装置番号に同時に出力する方法はない(0以上のスカラーでなければならない)
変数をまとめたいなら配列nにa-zを代入すればできる
640デフォルトの名無しさん
2014/10/18(土) 06:08:15.41ID:5RvmRbo5 >>638
出力するユニットが同じならサブルーチンでまとめれば良いんじゃない?
出力するユニットが同じならサブルーチンでまとめれば良いんじゃない?
641デフォルトの名無しさん
2014/10/18(土) 07:53:57.67ID:py32Gd52 fortranからRを呼び出すようなことはできないでしょうか?
system call?からRを呼び出すぐらいしかないでしょうかね?
system call?からRを呼び出すぐらいしかないでしょうかね?
642デフォルトの名無しさん
2014/10/18(土) 08:55:47.73ID:XNaq3m/i gnuplotでもそうだが
Rのソースをfortranで生成するようにして
system callから実行させればいいだろ
Rのソースをfortranで生成するようにして
system callから実行させればいいだろ
643デフォルトの名無しさん
2014/10/18(土) 09:10:45.91ID:XNaq3m/i644デフォルトの名無しさん
2014/10/18(土) 09:18:33.82ID:XNaq3m/i 考えてみれば四行に増えたなwwwwwww
645デフォルトの名無しさん
2014/10/19(日) 01:11:43.08ID:66Dn4RCH たしか coarray を使うとプロセスが複数走って、それぞれのプロセスで
別々にI/Oできるから形式上は1行でできるぞ。
まぁこれがやりたいことではないのは重々承知だがwww
別々にI/Oできるから形式上は1行でできるぞ。
まぁこれがやりたいことではないのは重々承知だがwww
646デフォルトの名無しさん
2014/10/19(日) 13:24:38.74ID:jrAJRFBN647デフォルトの名無しさん
2014/10/20(月) 00:32:03.39ID:w06RwgSj 配列内の最大最小を、区間指定でできませんか?
maxだとできなかったんですが
maxだとできなかったんですが
648デフォルトの名無しさん
2014/10/20(月) 01:10:20.17ID:Q283dmtl 区間指定ってなんだよw
maxlocのことか?それともmaxval(a(20:20))のことか?
他人に理解できる表現で頼むぜw
maxlocのことか?それともmaxval(a(20:20))のことか?
他人に理解できる表現で頼むぜw
649デフォルトの名無しさん
2014/10/21(火) 04:04:46.35ID:dBWrLa1J >>647
部分配列に代入して、maxを使うという意味?
部分配列に代入して、maxを使うという意味?
650デフォルトの名無しさん
2014/10/21(火) 08:48:40.55ID:RmR2qSHy >615
亀レスですが、最適な刻み幅については、
森口繁一『数値計算術』に
「題4章 刻み幅の自動調節」
という記述があります。
ご参考までに
亀レスですが、最適な刻み幅については、
森口繁一『数値計算術』に
「題4章 刻み幅の自動調節」
という記述があります。
ご参考までに
651デフォルトの名無しさん
2014/10/22(水) 21:06:47.85ID:ZWb1Adxr652デフォルトの名無しさん
2014/10/23(木) 00:20:38.34ID:uxreCuFc653デフォルトの名無しさん
2014/10/23(木) 00:27:54.57ID:ULvaqeb6 ならば MAXVAL(a(10:20)) だ。
654デフォルトの名無しさん
2014/10/23(木) 08:52:15.53ID:afuBwKUi >652
p.195〜206
なおプログラムはpascalで書かれています
p.195〜206
なおプログラムはpascalで書かれています
655デフォルトの名無しさん
2014/10/23(木) 23:13:40.41ID:lbc4SK47 >>653
できました!ありがとうございました
できました!ありがとうございました
656ホモおじさん
2014/10/24(金) 00:54:53.39ID:vm5n6mmb657デフォルトの名無しさん
2014/10/24(金) 01:31:35.96ID:IV+qiUp4658ホモおじさん
2014/10/24(金) 03:18:53.64ID:vm5n6mmb >>657
xが大きい方で計算したいなら通分して 1/(1-exp(-x)) の形で計算するのが定石だが、
どっちにしろ x=20〜30くらいでもう 1/1=1 でその先は無理に計算しなくてもいい。
この辺は数値計算術にいっぱい書いてある。
森口繁一の本は古いけど結構面白い。
数値計算術〜計算数学夜話<<数値計算工学の感じで真面目になる。
それにつけても蔵王のお釜が白濁液まみれというニュースが興味深いよね。
xが大きい方で計算したいなら通分して 1/(1-exp(-x)) の形で計算するのが定石だが、
どっちにしろ x=20〜30くらいでもう 1/1=1 でその先は無理に計算しなくてもいい。
この辺は数値計算術にいっぱい書いてある。
森口繁一の本は古いけど結構面白い。
数値計算術〜計算数学夜話<<数値計算工学の感じで真面目になる。
それにつけても蔵王のお釜が白濁液まみれというニュースが興味深いよね。
659デフォルトの名無しさん
2014/10/28(火) 00:52:02.95ID:UO1zyFOr Fortran で realloc に相当することをやりたんだけど、どうしたらいいでしょうぁ。
660デフォルトの名無しさん
2014/10/28(火) 03:20:58.44ID:1iw7NGT6 >>659
宣言でallocatable
使う前にallocateで割り当て
大きさ変える前にdeallocateしてallocateで再割り当て
中身を確実に保存したかったらdeallocate前に別の変数にコピー
これで一応配列の大きさを変えれる
宣言でallocatable
使う前にallocateで割り当て
大きさ変える前にdeallocateしてallocateで再割り当て
中身を確実に保存したかったらdeallocate前に別の変数にコピー
これで一応配列の大きさを変えれる
661デフォルトの名無しさん
2014/10/28(火) 03:55:09.13ID:2ZNKkFIp Fortran2003なら move_alloc を使う。
alloctae(tmp(new_size))
new_size(1:size(array)) = array
call move_alloc(tmp, array)
move_alloc は番地(ポインタ)を写すだけなのでメモリー内容のコピーは1回で済む。
modern fortran explained 15.5.3 Transferring an allocation 参照
alloctae(tmp(new_size))
new_size(1:size(array)) = array
call move_alloc(tmp, array)
move_alloc は番地(ポインタ)を写すだけなのでメモリー内容のコピーは1回で済む。
modern fortran explained 15.5.3 Transferring an allocation 参照
662デフォルトの名無しさん
2014/10/29(水) 00:46:52.02ID:RDb2D61y ちょっとスレチかもしれませんが…
無限級数の和が1になるものうち、\Sigma^{\infty}_{0} (1/2)^n よりも収束速度がゆっくりなものって何かありますか?
刻み幅に使いたいんですが中々思いつかないですm(__)m
無限級数の和が1になるものうち、\Sigma^{\infty}_{0} (1/2)^n よりも収束速度がゆっくりなものって何かありますか?
刻み幅に使いたいんですが中々思いつかないですm(__)m
663デフォルトの名無しさん
2014/10/29(水) 12:33:02.25ID:HQN23iJw 質問がおかしいので、たぶん刻み幅っていうより問題設定が間違っている。
664デフォルトの名無しさん
2014/10/30(木) 00:25:40.34ID:BI8qle6I >>663
つまりは足し上げて1に収束するような数列を知りたいんです。
(1/2)+(1/2)^2+(1/2)^3+(1/2)^4+.....+(1/2)^n->1 ですよね?
これだと収束スピードが速すぎるので、もう少し緩めに収束する数列を知りたいんです
つまりは足し上げて1に収束するような数列を知りたいんです。
(1/2)+(1/2)^2+(1/2)^3+(1/2)^4+.....+(1/2)^n->1 ですよね?
これだと収束スピードが速すぎるので、もう少し緩めに収束する数列を知りたいんです
665デフォルトの名無しさん
2014/10/30(木) 22:03:37.99ID:jLdY1ojF intel fortran compilerが、非商用版があると聞いたんですけど
ホームページに行ってもありませんでした
もう非商用版は終了したんでしょうか
ホームページに行ってもありませんでした
もう非商用版は終了したんでしょうか
666デフォルトの名無しさん
2014/10/30(木) 23:06:25.70ID:BI8qle6I >>665
ありますよ
ありますよ
667デフォルトの名無しさん
2014/10/30(木) 23:08:34.49ID:jLdY1ojF668デフォルトの名無しさん
2014/10/30(木) 23:46:30.56ID:BI8qle6I >>667
ttp://pen.agbi.tsukuba.ac.jp/~RStiger/hiki2/?Fortran+(Intel+Parallel+Studio+XE)+%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8
この辺参考にしましたよ(^^)
ttp://pen.agbi.tsukuba.ac.jp/~RStiger/hiki2/?Fortran+(Intel+Parallel+Studio+XE)+%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8
この辺参考にしましたよ(^^)
669デフォルトの名無しさん
2014/10/31(金) 06:45:08.15ID:vB//dhHV 非商用ページにたどり着く方法, 頻繁に変わって不便だよなあ
ライセンス登録して.licファイルなりシリアルコードなり持ってるなら直接DLするって手もあるが
ttp://registrationcenter-download.intel.com/akdlm/irc_nas/4584/parallel_studio_xe_2015.tgz
ライセンス登録して.licファイルなりシリアルコードなり持ってるなら直接DLするって手もあるが
ttp://registrationcenter-download.intel.com/akdlm/irc_nas/4584/parallel_studio_xe_2015.tgz
670デフォルトの名無しさん
2014/10/31(金) 18:03:58.39ID:NN74lK+x671デフォルトの名無しさん
2014/11/01(土) 22:28:08.66ID:wAFS/Rlb amazon ec2で計算してる人いる?
672デフォルトの名無しさん
2014/11/02(日) 10:01:51.45ID:P1O0Zm4b >669
御呈示のアドレスはLinux版ですが、Windows版
について情報をおもちではないでしょうか
御呈示のアドレスはLinux版ですが、Windows版
について情報をおもちではないでしょうか
673デフォルトの名無しさん
2014/11/02(日) 10:23:39.60ID:Y+tjsjxk674デフォルトの名無しさん
2014/11/02(日) 20:58:20.47ID:r8jFoIGa 乞食か
675デフォルトの名無しさん
2014/11/06(木) 01:07:08.08ID:NBIHQ5C4 Linux版以外も学生非商用は無料だろ。
676デフォルトの名無しさん
2014/11/06(木) 07:51:33.96ID:lC8feXNL >>675
嘘つくなよ、ゴミ屑
嘘つくなよ、ゴミ屑
677デフォルトの名無しさん
2014/11/16(日) 23:31:47.83ID:jtA73LXf 2つの実測値の相関係数を出したいのですが、
fortranでできないでしょうか
実測値は単純な直線傾向ではないです
エクセルで手動でやることも考えたのですが、
実測値が100ケースほどあって、
今後も増えることを考えるとプログラムで作りたいと思いました
もしよければアドバイスいただけないでしょうか
fortranでできないでしょうか
実測値は単純な直線傾向ではないです
エクセルで手動でやることも考えたのですが、
実測値が100ケースほどあって、
今後も増えることを考えるとプログラムで作りたいと思いました
もしよければアドバイスいただけないでしょうか
678デフォルトの名無しさん
2014/11/17(月) 09:46:48.96ID:vGRlOVoS679デフォルトの名無しさん
2014/11/17(月) 13:53:58.07ID:jwH5O+V+ >>678
Octave でもいいんじゃないの?
Octave でもいいんじゃないの?
680デフォルトの名無しさん
2014/11/17(月) 18:52:41.93ID:yxNOhCMR681デフォルトの名無しさん
2014/12/13(土) 01:43:27.96ID:IhMrPb/B Fortranで書かれている遺伝的アルゴリズムのライブラリが
手に入るところはないでしょうか
手に入るところはないでしょうか
2014/12/13(土) 18:32:39.00ID:ycSbkqQR
683デフォルトの名無しさん
2014/12/15(月) 00:30:38.37ID:+0+wnp46 MPICH または OPENMPI で Fortran2008 bindings を使う方法を教えろ下さい。
ドキュメントにはサポートと書いてあるが、インストールしても MPI_F08.MOD が
生成されない@Ubuntu
どうか助けろ下さい。こっちのスレへ行けという指示でもおk
ドキュメントにはサポートと書いてあるが、インストールしても MPI_F08.MOD が
生成されない@Ubuntu
どうか助けろ下さい。こっちのスレへ行けという指示でもおk
684デフォルトの名無しさん
2014/12/15(月) 19:55:14.30ID:oICLvczS ランダム生成のコードのについて質問です。
ifortではコンパイルできたのですが、gfortranではエラーが出ました。
以下がエラーメッセージです。
""$ gfortran routine.f90
routine.f90:32.25:
call random_seed( put = (/c * 999/) )
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (1/12)""
putの大きさが本質的に小さすぎる、や(=c とした時)本質的に配列である。といったメッセージだと思い、いじってみたのですが解決方法が分かりません。よろしくお願いします。
あと / ~ / のスラッシュの意味もよろしければお願いします。
ifortではコンパイルできたのですが、gfortranではエラーが出ました。
以下がエラーメッセージです。
""$ gfortran routine.f90
routine.f90:32.25:
call random_seed( put = (/c * 999/) )
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (1/12)""
putの大きさが本質的に小さすぎる、や(=c とした時)本質的に配列である。といったメッセージだと思い、いじってみたのですが解決方法が分かりません。よろしくお願いします。
あと / ~ / のスラッシュの意味もよろしければお願いします。
685デフォルトの名無しさん
2014/12/15(月) 20:47:21.21ID:vJVAgy9L 試しにgfortran4.9でrandom_seed(size=i)(iはinteger)を実行したらi=12だった
つまりgfortranの場合はputの引数が大きさ12以上の1次元整数配列でなければならない
(/c*999/)は大きさ1の1次元配列で、その値がc*999という意味だからエラーになる
つまりgfortranの場合はputの引数が大きさ12以上の1次元整数配列でなければならない
(/c*999/)は大きさ1の1次元配列で、その値がc*999という意味だからエラーになる
686デフォルトの名無しさん
2014/12/15(月) 20:51:20.48ID:waUBgqmC687デフォルトの名無しさん
2014/12/15(月) 22:17:44.08ID:oICLvczS >>685
丁寧な説明ありがとうございます。
cを配列にすると上あるシステムクロックのcountの取得のところでエラーが出てと堂々めぐりをしてましたが、シードが12の配列でも要素一つ変えれば乱数にはなるということなんですね。
スラッシュが配列を表しているとは気づきませんでした。勉強になります。
丁寧な説明ありがとうございます。
cを配列にすると上あるシステムクロックのcountの取得のところでエラーが出てと堂々めぐりをしてましたが、シードが12の配列でも要素一つ変えれば乱数にはなるということなんですね。
スラッシュが配列を表しているとは気づきませんでした。勉強になります。
688デフォルトの名無しさん
2014/12/17(水) 02:40:01.63ID:5R4Eyqcc LU分解のサブルーチンが作れません(ToT)
サンプルがあったらください…
サンプルがあったらください…
689デフォルトの名無しさん
2014/12/17(水) 02:41:44.43ID:5R4Eyqcc >>688
検索して、それっぽいのが出てきたんですがメインプログラムに噛ませてもうまくいきませんでした…
検索して、それっぽいのが出てきたんですがメインプログラムに噛ませてもうまくいきませんでした…
690デフォルトの名無しさん
2014/12/18(木) 08:43:35.24ID:BU61zCPz >>689
なら氏ね
なら氏ね
691デフォルトの名無しさん
2014/12/18(木) 14:54:41.87ID:8HGauugM MacOSX10.10.1, gfortran4.9にてコンパイル後、実行時に発生する下記のエラーの解決策はあるのでしょうか?
At line 68 of file test.f90 (unit = 1, file = 'parameter.txt')
Fortran runtime error: Cannot match namelist object name 44
namelistの不一致は見当たらず、Windows7, g95では正常に動作しました。
At line 68 of file test.f90 (unit = 1, file = 'parameter.txt')
Fortran runtime error: Cannot match namelist object name 44
namelistの不一致は見当たらず、Windows7, g95では正常に動作しました。
692デフォルトの名無しさん
2014/12/18(木) 23:40:19.37ID:jd6kmeGe 計算流体力学を習い初めの学生なんですが、Radeonでfortranの計算をする場合にはどのソフトをインストールすればいいのでしょうか?
MinGW Command PromptとTDM-GCC-64というのを使っています。
出来ればインストール方法が書かれたページも一緒に知りたいです。
MinGW Command PromptとTDM-GCC-64というのを使っています。
出来ればインストール方法が書かれたページも一緒に知りたいです。
693デフォルトの名無しさん
2014/12/19(金) 20:10:17.60ID:nJn0njjQ open文で開いたcsvファイルをread(51,*)〜〜などで
読み込む操作が何回かある場合、
並列化はできたりしないでしょうか
読み書きはやっぱり並列化は無理でしょうか
読み込む操作が何回かある場合、
並列化はできたりしないでしょうか
読み書きはやっぱり並列化は無理でしょうか
694デフォルトの名無しさん
2014/12/20(土) 11:31:57.54ID:9/Q8xBDD 『if … else if … end if』と『select case …』はどっちが速いのか,ふと思って計測してみた.
cygwin gcc 4.8.3@core-i5で繰り返し計測してみたけど,時間差はばらつきの範囲内で有意な差はなさそうな感じ.
二つの構文ともCPU時間同じ,機能も同じで,いまいち,使い分け方が分からないんだよねぇ...
使ったコードはこれ↓
module mod_util
implicit none
integer(kind=4) :: t1, t2, t_rate, t_max, t_diff
contains
real(8) function elapsedTime()
implicit none
call SYSTEM_CLOCK(t2, t_rate, t_max)
if ( t2 < t1 ) then
t_diff = t_max - t1 + t2
else
t_diff = t2 - t1
endif
elapsedTime = t_diff/real(t_rate)
end function elapsedTime
end module mod_util
cygwin gcc 4.8.3@core-i5で繰り返し計測してみたけど,時間差はばらつきの範囲内で有意な差はなさそうな感じ.
二つの構文ともCPU時間同じ,機能も同じで,いまいち,使い分け方が分からないんだよねぇ...
使ったコードはこれ↓
module mod_util
implicit none
integer(kind=4) :: t1, t2, t_rate, t_max, t_diff
contains
real(8) function elapsedTime()
implicit none
call SYSTEM_CLOCK(t2, t_rate, t_max)
if ( t2 < t1 ) then
t_diff = t_max - t1 + t2
else
t_diff = t2 - t1
endif
elapsedTime = t_diff/real(t_rate)
end function elapsedTime
end module mod_util
695694
2014/12/20(土) 11:33:00.40ID:9/Q8xBDD program testSelectIf
use mod_util, only : t1, elapsedTime
implicit none
real (kind=8) :: randX
integer(kind=4) :: i, j, randI
#ifdef ifelse
write(*,'("# if ... else if ... ")')
#else
write(*,'("# select case")')
#endif
call init_randomSeed(972384)
call SYSTEM_CLOCK(t1)
do i = 1, 100000000
call random_number(randX)
randI = int( randX * 10, kind=4 )
#ifdef ifelse
if ( randI == 1 ) then; j = j + 1
else if ( randI == 2 ) then; j = j - 2
else if ( randI == 3 ) then; j = j + 3
else if ( randI == 4 ) then; j = j - 4
else if ( randI == 5 ) then; j = j + 5
else if ( randI == 6 ) then; j = j - 6
else if ( randI == 7 ) then; j = j + 7
else if ( randI == 8 ) then; j = j - 8
else if ( randI == 9 ) then; j = j + 9
else if ( randI ==10 ) then; j = j - 10
use mod_util, only : t1, elapsedTime
implicit none
real (kind=8) :: randX
integer(kind=4) :: i, j, randI
#ifdef ifelse
write(*,'("# if ... else if ... ")')
#else
write(*,'("# select case")')
#endif
call init_randomSeed(972384)
call SYSTEM_CLOCK(t1)
do i = 1, 100000000
call random_number(randX)
randI = int( randX * 10, kind=4 )
#ifdef ifelse
if ( randI == 1 ) then; j = j + 1
else if ( randI == 2 ) then; j = j - 2
else if ( randI == 3 ) then; j = j + 3
else if ( randI == 4 ) then; j = j - 4
else if ( randI == 5 ) then; j = j + 5
else if ( randI == 6 ) then; j = j - 6
else if ( randI == 7 ) then; j = j + 7
else if ( randI == 8 ) then; j = j - 8
else if ( randI == 9 ) then; j = j + 9
else if ( randI ==10 ) then; j = j - 10
696694
2014/12/20(土) 11:33:45.85ID:9/Q8xBDD end if
#else
select case (randI)
case ( 1 ); j = j + 1
case ( 2 ); j = j - 2
case ( 3 ); j = j + 3
case ( 4 ); j = j - 4
case ( 5 ); j = j + 5
case ( 6 ); j = j - 6
case ( 7 ); j = j + 7
case ( 8 ); j = j - 8
case ( 9 ); j = j + 9
case ( 10 ); j = j - 10
end select
#endif
end do
write(*,'("j=",I0)') j
write(*,'("#time:", F10.3)') elapsedTime()
end program testSelectIf
#else
select case (randI)
case ( 1 ); j = j + 1
case ( 2 ); j = j - 2
case ( 3 ); j = j + 3
case ( 4 ); j = j - 4
case ( 5 ); j = j + 5
case ( 6 ); j = j - 6
case ( 7 ); j = j + 7
case ( 8 ); j = j - 8
case ( 9 ); j = j + 9
case ( 10 ); j = j - 10
end select
#endif
end do
write(*,'("j=",I0)') j
write(*,'("#time:", F10.3)') elapsedTime()
end program testSelectIf
697デフォルトの名無しさん
2014/12/21(日) 02:39:49.62ID:+T8Tju2f >>693
I/O中に計算とかしたいという意味での並列化なら、F2003でasynchronous I/Oが出来る
ようになった。同じファイルの別々の位置のデータを並列に読み出したいという意味なら
そもそもハードウェア的に無理だろう。
>>694
最適化の問題というより、計算型GOTOの後継機能といったものではないか?
構造化プログラミングがホットだった時代は、GOTO 文を追放するための基本構造
のひとつとされていた気がする。
CASE文の中に入るのが、整数型、文字型、論理型のように離散値をとる場合に
限られるので、IF..ELSE IFの連鎖との使い分けは、比較で=が意味を持つ型か
或いは実数型などのように=があったとしても基本的に<、>的な大小比較しか
意味を持たない場合を、意識して明示的に区別していますよというアピールではないか。
I/O中に計算とかしたいという意味での並列化なら、F2003でasynchronous I/Oが出来る
ようになった。同じファイルの別々の位置のデータを並列に読み出したいという意味なら
そもそもハードウェア的に無理だろう。
>>694
最適化の問題というより、計算型GOTOの後継機能といったものではないか?
構造化プログラミングがホットだった時代は、GOTO 文を追放するための基本構造
のひとつとされていた気がする。
CASE文の中に入るのが、整数型、文字型、論理型のように離散値をとる場合に
限られるので、IF..ELSE IFの連鎖との使い分けは、比較で=が意味を持つ型か
或いは実数型などのように=があったとしても基本的に<、>的な大小比較しか
意味を持たない場合を、意識して明示的に区別していますよというアピールではないか。
698694
2014/12/22(月) 19:17:39.41ID:mnW7xu7L699デフォルトの名無しさん
2014/12/22(月) 21:51:51.17ID:KCseyMpL >>697
ありがとうございます
やりたかったことはcsvファイルがいくつかあり、
それを順番に読み込みreadするdoループを並列化できないかなということでした
教えていただいた後者の方にあたりそうな気がしまして、
勉強になりました。
ありがとうございます
やりたかったことはcsvファイルがいくつかあり、
それを順番に読み込みreadするdoループを並列化できないかなということでした
教えていただいた後者の方にあたりそうな気がしまして、
勉強になりました。
700デフォルトの名無しさん
2014/12/23(火) 16:29:15.14ID:gTJoh1O6 永らくFORTRAN77で飯を食ってたのですが,より新しいFORTRANへ移行してみたくなりました
なにか良書はありましょうか?
職業プログラマで社内で請負で流体や構造体のメッシャーを組んでます
まあ,ベースのプログラムも77,新規も77縛りの事が多いので特に困ってはないのです
しかし,昔,汎用機世代の6しか書けないような先輩方を古臭いと笑っていたのですが自分もそんな年になってしまい
後輩らに笑われたくないので,ちょっと勉強しておきたいと考えています
世の90の初心本(それ以降は書店でも見ないなー)等は基本的な制御構文等が厚く書かれており
ホントに身に着けたい新たな概念のintent等がおざなりになってしまっています
古臭い77書きに光を......
#C++もやってるのでクラスの概念なんかも問題はありません
なにか良書はありましょうか?
職業プログラマで社内で請負で流体や構造体のメッシャーを組んでます
まあ,ベースのプログラムも77,新規も77縛りの事が多いので特に困ってはないのです
しかし,昔,汎用機世代の6しか書けないような先輩方を古臭いと笑っていたのですが自分もそんな年になってしまい
後輩らに笑われたくないので,ちょっと勉強しておきたいと考えています
世の90の初心本(それ以降は書店でも見ないなー)等は基本的な制御構文等が厚く書かれており
ホントに身に着けたい新たな概念のintent等がおざなりになってしまっています
古臭い77書きに光を......
#C++もやってるのでクラスの概念なんかも問題はありません
701デフォルトの名無しさん
2014/12/23(火) 16:43:41.88ID:AyCexUV4 日本語の書籍に関しては仰る通りで、特に2003以降は全くないはず
まずはnagのサイトにあるFortran入門とFortran 2003入門が無難かと
ただ、これらは規格を網羅してるわけではないので
完全な仕様を知りたい場合はコンパイラのマニュアルや
JIS規格(JIS X 3001-1:2009)も参照する必要あり
まずはnagのサイトにあるFortran入門とFortran 2003入門が無難かと
ただ、これらは規格を網羅してるわけではないので
完全な仕様を知りたい場合はコンパイラのマニュアルや
JIS規格(JIS X 3001-1:2009)も参照する必要あり
702デフォルトの名無しさん
2014/12/23(火) 20:48:23.28ID:gTJoh1O6 >694
selectは単一の変数でしか使えないよ
selectはどうかするとジャンプテーブルで一発の比較で処理してくれる可能性が高い
最近のコンパイラはelseifでもそうするとか聞くけど,どうだろうね?
elseifは良く引っかかるのを前に持って来て早めに引っ掛ける事ができるとかも聞くねー
個人的には,読みやすさを優先するなー
#Cのswitchの議論と同じなので探してみると良いよ
selectは単一の変数でしか使えないよ
selectはどうかするとジャンプテーブルで一発の比較で処理してくれる可能性が高い
最近のコンパイラはelseifでもそうするとか聞くけど,どうだろうね?
elseifは良く引っかかるのを前に持って来て早めに引っ掛ける事ができるとかも聞くねー
個人的には,読みやすさを優先するなー
#Cのswitchの議論と同じなので探してみると良いよ
703700
2014/12/23(火) 20:51:07.24ID:gTJoh1O6 ありがとうございます
まずはサイトのそれらを読んでみます
その後は......JISかー,読みやすさを優先してくれないからなー
コンパイラのマニュアルは殆ど英語になるのが悲しい
まずはサイトのそれらを読んでみます
その後は......JISかー,読みやすさを優先してくれないからなー
コンパイラのマニュアルは殆ど英語になるのが悲しい
704デフォルトの名無しさん
2014/12/23(火) 23:30:23.88ID:pDBo2/8d >700,703
Fortran90の日本語の解説本で良いなら、
bit別冊 詳解Fortran90 1993年12月号別冊 共立出版
という本があります。これは『Fortran90 Explained』の日本語訳です。
但し、雑誌の別冊ということもあり入手は極めて困難でしょう。
あるとすれば、理工系の大学図書館が一番可能性が高いと思います。
参考までにどうぞ。
Fortran90の日本語の解説本で良いなら、
bit別冊 詳解Fortran90 1993年12月号別冊 共立出版
という本があります。これは『Fortran90 Explained』の日本語訳です。
但し、雑誌の別冊ということもあり入手は極めて困難でしょう。
あるとすれば、理工系の大学図書館が一番可能性が高いと思います。
参考までにどうぞ。
705デフォルトの名無しさん
2014/12/29(月) 01:02:13.12ID:hjLOuT9S Fortranを使われている方は他にはどんな言語を扱っているのですか?
pythonとかでしょうか
pythonとかでしょうか
706デフォルトの名無しさん
2014/12/29(月) 09:04:30.59ID:6EMRS7hN >>705
perl
perl
707デフォルトの名無しさん
2015/01/04(日) 14:13:23.64ID:OaA6oEKz >>700
おいらもFORTRAN77使いなんで、小文字のプログラムに違和感ありまくり
おいらもFORTRAN77使いなんで、小文字のプログラムに違和感ありまくり
708デフォルトの名無しさん
2015/01/04(日) 16:56:46.08ID:Ydg+fj8+ >>707
こっちはfortran90からの新参なんで、77のソース見ると大文字、goto文ありでなかなか新鮮です。
ところでfortran2003の機能すべてカバーしてるコンパイラは商用しかないのかな。
gfortran使いなんでカナピー(´・_・`)
こっちはfortran90からの新参なんで、77のソース見ると大文字、goto文ありでなかなか新鮮です。
ところでfortran2003の機能すべてカバーしてるコンパイラは商用しかないのかな。
gfortran使いなんでカナピー(´・_・`)
709デフォルトの名無しさん
2015/01/04(日) 20:02:59.44ID:1HVLEOms 商用だけですな
しかし商用Fortranコンパイラは趣味で買うには高すぎるので
gfortranが対応してる範囲で書いてます
しかし商用Fortranコンパイラは趣味で買うには高すぎるので
gfortranが対応してる範囲で書いてます
710デフォルトの名無しさん
2015/01/04(日) 23:43:36.28ID:YPIAtxeL711デフォルトの名無しさん
2015/01/04(日) 23:48:08.93ID:YPIAtxeL712デフォルトの名無しさん
2015/01/05(月) 11:27:48.33ID:dcVDuqIP >>710
勉強用なら
VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
で、とりあえずLinux環境作っちゃうのも手なんかね
…もちろん、LinuxやBSDに詳しい人にはこの構成では不満が出てくるだろうが
(特にUbuntuの標準GUI、嫌いな人結構多いしな)
知らん人がサクッとUnix系の環境作るには楽だと思った
勉強用なら
VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
で、とりあえずLinux環境作っちゃうのも手なんかね
…もちろん、LinuxやBSDに詳しい人にはこの構成では不満が出てくるだろうが
(特にUbuntuの標準GUI、嫌いな人結構多いしな)
知らん人がサクッとUnix系の環境作るには楽だと思った
713デフォルトの名無しさん
2015/01/05(月) 12:04:08.73ID:IJbwWfwV >>712
>VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
>で、とりあえずLinux環境作っちゃうのも手なんかね
Fortranの勉強のためならこれが正解だと思う。わざわざLinux用の領域をハードディスク上に
確保して…というのは面倒だしね。自分も次は仮想マシンを使うと思う。
UbuntuのGUIが気に入らない場合は、VirtualBoxにインストールできるか知らないけれど、
RHELクローンやOpenSUSEもあることだし。
>VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
>で、とりあえずLinux環境作っちゃうのも手なんかね
Fortranの勉強のためならこれが正解だと思う。わざわざLinux用の領域をハードディスク上に
確保して…というのは面倒だしね。自分も次は仮想マシンを使うと思う。
UbuntuのGUIが気に入らない場合は、VirtualBoxにインストールできるか知らないけれど、
RHELクローンやOpenSUSEもあることだし。
714デフォルトの名無しさん
2015/01/05(月) 12:13:27.17ID:K2pJxzU2 VirtualBoxに入れるLinuxなんて、GUI抜きで容量減らしてインストールして
sshでもっと使い易い端末エミュレーターから操作するのが普通じゃないか
sshでもっと使い易い端末エミュレーターから操作するのが普通じゃないか
715デフォルトの名無しさん
2015/01/05(月) 12:35:46.63ID:dcVDuqIP >>714
もちろんそれが理想的だし、解ってりゃ大したことないんだけどね
もちろんそれが理想的だし、解ってりゃ大したことないんだけどね
716デフォルトの名無しさん
2015/01/07(水) 02:53:13.20ID:2xplb8o3 でも最近の Linux intel fortran も windows と同じ GUI でインストールできる
ようになってるし〜 楽ちんしたいのよ〜
ようになってるし〜 楽ちんしたいのよ〜
717デフォルトの名無しさん
2015/01/09(金) 00:18:45.90ID:osa1YwUn ifortやgfortranのオプションについて教えてください.
Makefileを書くとき,コンパイルオプションやリンクオプションをCFLAGSとLDFLAGSに分けて書くのが一般的みたいですが,
Intel Fortranコンパイラのユーザー・リファレンス・ガイドやgfortran/gccのマニュアルを読んでも,
どのオプションがコンパイルオプションで,どれがリンクオプションか明記されていませんよね?
コンパイラとリンカに与えるべきオプションは,それぞれ,どうやって見分けたら良いんでしょうか?
Makefileを書くとき,コンパイルオプションやリンクオプションをCFLAGSとLDFLAGSに分けて書くのが一般的みたいですが,
Intel Fortranコンパイラのユーザー・リファレンス・ガイドやgfortran/gccのマニュアルを読んでも,
どのオプションがコンパイルオプションで,どれがリンクオプションか明記されていませんよね?
コンパイラとリンカに与えるべきオプションは,それぞれ,どうやって見分けたら良いんでしょうか?
718デフォルトの名無しさん
2015/01/16(金) 00:14:55.27ID:ZBkPwkB6 intel fortranの非商用版終了したっぽいな
719デフォルトの名無しさん
2015/01/16(金) 07:28:02.50ID:zC22PbLh720デフォルトの名無しさん
2015/01/16(金) 10:37:10.07ID:gldaWoEV721デフォルトの名無しさん
2015/01/16(金) 11:08:31.95ID:pdIo+qaj >>720
ありがとうm(__)m
ありがとうm(__)m
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【無言】中国怒らせた高市首相→1週間だんまり、国民に実害も説明なし 中国問題を避けてスルー… ★4 [BFU★]
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★10 [樽悶★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- 【音楽】『日本レコード大賞』各賞発表! 大賞候補にILLIT、M!LK、ふるっぱー、幾田りら、アイナ、ミセスら… 作詩賞は指原莉乃 [冬月記者★]
- 中国、レアアース輸出制限wwwwwwwwwwwwwwwwwwwwwwww🎌 [329329848]
- おまえらって冷笑系おおすぎじゃね
- 日本をドーム状に覆って気温を一定にしたほうが過ごしやすいんじゃないの?
- 職場の人の雑談あまりにもどうでもよくて混ざらないんだけどさ
- 来月のクリスマス何か予定ある?
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
