1 名前:デフォルトの名無しさん [2006/11/22(水) 00:00:36 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。 ●注意事項 ・質問する前にGoogle等の検索サイトで検索しましょう。 ・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。 ・エラーの場合は起きた状況、環境(OS・コンパイラ)、エラーメッセージも詳しく書きましょう。 ●前スレ くだすれFORTRAN(超初心者用) pc8.2ch.net/test/read.cgi/tech/1138063703/ ●関連スレ FORTRAN W pc8.2ch.net/test/read.cgi/tech/1163319215/
281 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:45:08 ] workに何も代入してないじゃん。
282 名前:254 [2007/02/13(火) 22:01:02 ] >>281 つまり、work(1)〜(10)までを定義してやる必要があるということですよね? (1)〜(10)を「どのように求めるつもりなのか」を明記するってことですか? この場合だと、x-yでいいのかな?
283 名前:デフォルトの名無しさん [2007/02/13(火) 22:15:46 ] 彼が何をしたいかわからない俺は馬鹿
284 名前:254 [2007/02/13(火) 22:36:55 ] >>283 バカですんません。 とりあえず、やりたいことというのは、 @定められた仕事回数の分の仕事(x-y)をdo loopで行う。 Ax-yを実行する度に、仕事回数zの数を増やす ※x-yがマイナスに達した時、xの値を初期設定の値に戻す。仕事回数zに+1する代わりに、 その後、missの項目に+1する。 B仕事回数が規定に達したらそこでプログラム終了。 何故、こんな意味のわからないプログラムを組むのかというと高校の卒業課題で使うためです。 これによってある計算をしなければならないので…(詳細はここでは書けませんが) とりあえず、x-yの計算結果と、missの回数すら出力できてないので、僕は非常に混乱しています… バカでほんとうにすいませんorz
285 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:50:05 ] >>284 卒業課題って今年度の? 今の状態で行き当たりばったりにプログラム書くより、教科書なり参考書なりをよく読んで もう一度基本的な文法を覚えなおした方がいいよ。 それからパソコン持ってるなら家でも予習復習できるように処理系の1つも入れておけ。 Windowsで学校の課題程度ならこれくらいで十分 ttp://www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran.htm 他は本スレ参照のこと pc10.2ch.net/test/read.cgi/tech/1163319215/2
286 名前:デフォルトの名無しさん [2007/02/14(水) 21:38:36 ] 構造格子上の3次元の温度データから等数値面をつくり、 その面に沿って面積分を行いたいのですが、うまくいきません。 そもそも曲面の求め方が悪いのか(勾配から法線ベクトルを出し格子内 で面を張っているだけ)チェック用に完全な球を作り、 面積分を行っても球の表面積と桁が違うような結果になってしまいます。 曲面の作成と面積分のやり方、あるいはfortranのサンプルプログラム等 に関してご存知でしたら教えてもらえませんか?
287 名前:デフォルトの名無しさん [2007/02/15(木) 21:46:19 ] 倍精度複素数型 cKappa には, 純虚数 か 実数 かの何れかが格納されています. つまり,cKappaを2乗すると必ず実数になるのですが, この値を倍精度実数型 dE に代入したいときは, dE = cKappa * cKappa で問題ないのでしょうか?
288 名前:デフォルトの名無しさん [2007/02/17(土) 01:12:06 ] 初心者でもぅさっぱり分かりません。 VS2005を入れてSilverfrostのftn95をインストールしてVSでftn95を選択。 一番簡単な PROGRAM MainProgram write(*,*) 'TEST' END を打ちデバッガ実行するとLINKエラーになります。このLINKエラーって何でしょうか?
289 名前:デフォルトの名無しさん [2007/02/17(土) 01:21:03 ] 288です。失礼 ------ Build started: Project: FortranApplication2, Configuration: Debug .NET ------ Building project FortranApplication2... Updating References... Linking... LINK : error - File not found: C:\Documents and Settings\.dbk こんなエラーです。
290 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:50:41 ] >>288 VS2002だが、うまく行っている。 エラーメッセージを見る限り、ファイルそのものが見つかっていないような。 まず単独でビルドしてみたら? Building project FortranApplication1... Updating References... Compiling file: FreeFormat1.f95 Linking... Assembly file Debug\NET\FortranApplication1.exe for .NET 1.1 produced Build log saved at: "file://C:\Documents and Settings\All Users\Documents\FORTRAN\FortranApplication1\Debug\NET\buildlog.txt" FortranApplication1 build succeeded.
291 名前:デフォルトの名無しさん [2007/02/18(日) 01:07:44 ] >>まず単独でビルドしてみたら? 時間がなく、余り調べていないのですが、自分はVSが初心者です。 コマンドプロンプトからはexeを生成し、実行まで出来るのですが、VSだと・・・orz 上記の「単独でビルド」とは何の作業をさすのでしょうか?
292 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:19:54 ] >>291 エラーメッセージから見ると、ソースファイルをプロジェクトに登録していないように見えるんだが。 New で作ったならそういう事は起きないが既存ソースなら登録がうまく言ってないのかも?
293 名前:デフォルトの名無しさん [2007/02/25(日) 14:25:10 ] s = a**b の計算が必要なときは s = exp(b*log(a)) と書いた方が計算が速いと聞いたのですが,本当でしょうか?
294 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 17:37:12 ] >>293 自分でベンチマーク作って確かめろw どっちにしろ一般のべき乗はexp log で計算しているはずなので、 8087のようにハードウェア的に実装されたexpを利用したかしないかの違いだろう。
295 名前:293 mailto:sage [2007/02/27(火) 10:33:43 ] >>294 うちのPCではどうやら後者の方が2割程度早いようです. コンパイラはIntel Visual Fortran 9.1です. それでこれからは全てexp logで計算しようと思ったのですが, 問題が発生しました. 次のような,モジュールで変数を共有する仕様の プログラムを書いたのですが,コメントしているように, 共有用モジュールの変数を介して値を渡した場合と 直接値を代入した場合で結果が異なってしまいます. ちなみにb**bで計算した場合はどちらも同じ結果を出力します. b=0の場合を除いて演算してもいいのですが, NaNになる原因が分からないので何とも怖くて使えません. 何かアドバイスあったらお願いします..
296 名前:293:プログラムリスト mailto:sage [2007/02/27(火) 10:34:24 ] module commons implicit none real(8) a(1:10) end module commons program main use commons implicit none a(1)=0.d0 call sub end program main subroutine sub use commons implicit none real(8) b !こちらを使うと出力は NaN b=a(1) !こちらを使うと出力は 1 b=0.d0 write(6,*) exp(b*log(b)) return end subroutine sub
297 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:19:52 ] >>295 組み込み関数 LOG(X) はXが実数の場合、Xは正(X>0)でなければならない。 IVFでは -∞ を返しているが、b * log(b) = 0 * -∞ = NaN となるので、 exp(b * log(b)) = exp(NaN) = NaN となる。 b=0.d0 の時に 1 と出力されるのは、コンパイル時に bの値が既知の定数(=0)なので 最適化によりプログラム中で b*log(b) が計算されず、直接 exp0.0D0) を求めてるため。 最適化なし(-Od)でコンパイルすると両方とも NaN になる。
298 名前:293 mailto:sage [2007/02/27(火) 21:35:35 ] >>297 おおー!確かにそうなります! 実にすっきりしました. どうもありがとうございます.
299 名前:293 mailto:sage [2007/02/27(火) 21:39:28 ] 途中で書き込んでしまいました. あまりに訳が分からないので さっきVinu Linuxをわざわざインストールしてgfortranでも 同じことをしたんですが,こちらは b=0.d0 と書いても b=a(1) で渡しても NaNとなりました. 今まで最適化で問題が発生したことが無かったこともあって, 原因がコンパイラの最適化にあったとは全然気がつきませんでした.
300 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:39:40 ] Xが0以下の実数の場合、LOG(X) の結果は処理系依存になるので 実行時エラーを出してプログラムを止める処理系もある。
301 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 00:44:46 ] 最近の処理系はIEEE準拠になって途中で実行時エラーで止まることが少なくなってありがたい。 せっかくIF文で例外を排除しているのに、コンパイラが最適化して勝手に投機的実行をして、 挙句に0割とかで実行時エラーを起こしてとまるとか、ウンコのようなことが昔はよくあったwwww
302 名前:デフォルトの名無しさん [2007/02/28(水) 04:01:39 ] 学校で今週までの課題で 『n元連立一次方程式をガウス・ザイデル法を利用して解くプログラムを作成し、テストを行え』 という課題がだされたのですが、全くわかりません(;_;) 頑張って本を読んでみたのですが理解できなくて(;_;) 最終手段として、ここに来ました(>_<) どなたか、ご教授下されば幸いです(;O;) 初めての書き込みなので粗相があったらすみませんm(__)m ちなみに学校で使っているのはフォートラン77です。
303 名前:デフォルトの名無しさん [2007/02/28(水) 12:05:08 ] またガウス・ザイデル法かw こんなの教科書にも載りまくりだろう。 誰かFAQにでも入れておけ。