全く同じソースコードがコンパイラのオプション次第で違う結果になって無問題ですか プログラムってそういうものだったのですね まあ並列プログラムなら当たり前ですね ごめんなさい私の認識が根本的に間違えてました
>>952 もし新しいコンパイラを、仕様チェックなど何ら下調べもせずに使って
「結果違うじゃん」とか言ってるんだとしたら、おめでたすぎ
そういうやつは古いコンパイラずっと使ってればいい
つーか非線形非定常のシミュレーションだと、オプション次第で結果が微妙に変わるなんて珍しくもないんだが
954 :
デフォルトの名無しさん :2009/01/18(日) 20:20:03
>>951 計算が大きくて特別なハードを使うのが偉いというわけでもないけどな。
古いコードを動かすことが出来るか出来ないかはそれなりに重要。
それに古いコードとの互換性を話することが即
新しいハードの機能を使うことを全く考えない、ということを
意味するわけではないんだけどな。
それこそ特定の機能を使って速度を上げる事「だけ」にうんうん悩むのも
何やってんの?ってかんじだけど。マッチ・ポンプだわな。
ま、それで飯は食えるかもしれんけどね。
>>946 vimですかー
vi系は全然知らなくて使えないんですよねぇ
練習しようかな
個人的にはMS-DOSプロンプトで動くvi(のエミュレータ)があるといいな。
>>956 重さはどんくらい?
コーディング用のエディタは軽いことが大事だと思うんだが
>>958 昔elvis.exeってあったぞ。
今でもメンテされてるかどうかは知らん。
962 :
899 :2009/01/19(月) 15:37:50
遅レスごめんなさい。CUDAのfortran対応について教えてくれた方々、 ありがとうございました。用途からしてfortranにこそ最初から対応せいよ、 というのは世間の感覚からずれてるんでしょうねw
まずはゲームをターゲットとしてるからじゃないの? ゲームじゃ普通C++だし
そこでオブジェクト指向(古っ)でVisualなFortranを・・・
call qqほにゃらら...
>>959 1万行くらいのソースをいじるけど、
重さを体感できないから、1mg くらい。
>>958 日本語Windows版 Vim 7.1 にはCUI版も一緒に入ってるよ。
本家 vim.org の方には16bit DOS用まであるよ。
>>967 おお、さんくす!
version6.3以降でCUI対応になってたんだね。さっそく使ってみるよ。
>>962 いや、コンパイラの従来言語の範囲内での対応ではFortranとCは同時になされている。
今までのCUDA対応は、あくまで専用言語か、プログラマ側がすべてを負担するAPI
呼び出しになっていた。
倍精度、IEEE準拠の条件が整ってきた今、Fortranからやれというのは、
それほど的外れでもないと思う。HPC分野に食い込めればの話だが。
cudaが倍精度いけるようになってたんだね
nvidiaのやる気次第か いや、やる気はあるが体力の問題か・・・
単純な数値計算を行っているのですがデータファイルを読み込むときに 現在はファイル名を直接打ち込んでファイル名を指定しているのですが Explorerのように選択式にすることってできませんか? もしくは「あるディレクトリに存在するすべてのファイル名を取得する」コマンドはありませんか? (DOSコマンドのdirのようなものです) よろしくお願いします
>>972 Win32のAPIを呼び出さないとできない。
>>972 の後半
do-loop つかってファイル名を無差別に生成して
inquire つかってしらみっつぶしに・・・
cpad for salford ftn77 でプログラミングしてるのですが 倍精度に変えようと型宣言でREALをREAL*8またはDOUBLE PRECISIONに変えてみてもうまく走りません 型宣言はINCLUDEで、.incでまとめて宣言しているのですが… 倍精度で計算するにはどうしたら良いのでしょうか?
976 :
デフォルトの名無しさん :2009/01/22(木) 10:26:07
文字の表示ってPRINT文なのですね てっきりWRITE(6,)って書くのかと思ってた
>>976 FORTRAN77全盛時代はWRITE(6,*)、6が出るのは66時代の名残。
しかし推奨はWRITE(*, *)だった。
普段はWRITE(*,*)を使って、PRINT文はデバッグ出力用にとっておくと、
デバッグ出力の消し忘れがなくなるぞい。
READに対しては、READ(5,*)→READ(*,*)→READ *の、同等な関係がある。
978 :
デフォルトの名無しさん :2009/01/22(木) 16:55:37
どうもありがとうございます WRITE文で書くと コンピューターって感じがして好きです
>>973 ちょっとがんばってみます
>>973 入力ファイル名は数字のみかつある程度規則性があるので不可能ではないですがやめておきます.
ちょっと調べてみたところWin32APIは私には無謀だということが分かりました 素直に打ち込みます ありがとうございました
GUIが簡単に作れる他の言語で選択したファイル名のリストを ファイルに出力するようなプログラムを作っておいて前処理で走らせる という手もある。
なるほど 無理にひとつのプログラムにしようとするから難しいので むしろそんなフリーソフト探したらありそうな・・・あった! それでやってみます。ありがとうございました
>>977 >普段はWRITE(*,*)を使って、PRINT文はデバッグ出力用にとっておくと、
>デバッグ出力の消し忘れがなくなるぞい。
いいこと聞いた!
>>980 Visual Fortran なら、サンプルがWin32の下にあったはず。
サンプルディレクトリを味噌。
WIN32APIのサンプルありました あったのですがそれをどのように使えば良いのか理解できませんでしたorz ちょっと勉強してみようと思います 参考になりました,ありがとうございました
今まで使っていた G4 Mac を新しいインテルMac にしたら,今まで使っていたAbsoftの F77コンパイラが使えなくなりました。そこで g77 を試しているのですが,古いソースで コンパイルできないものが出てしまいました。例えば次のようなものです。 do 101 i = 1, 5 if (i.eq.2) go to 101 do 101 j = 1, 5 write(*,*) i, j 101 continue end エラーメッセージは以下の通りです。 -------------------------------------------------------------------- g77test/test4.f:4: if (i.eq.2) go to 101 1 g77test/test4.f:5: (continued): do 101 j = 1, 5 2 Reference to label at (2) inconsistent with earlier reference at (1) -------------------------------------------------------------------- このような形式で書かれたソースプログラムが山のようにあり,とても全部を書き直す気に はなれません。何かのオプションを指定してコンパイルすれば良いのではと思い,いくつか の試みましたがどれもダメでした。良い知恵は無いでしょうか。 PC:MacBook OS:10.5.6 g77:3.4.3-104
>>985 世話が焼けんなw ほとんどサンプルと同じものだが・・・
! see c:\Program Files\Intel\Compiler\11.0\066\fortran\Samples\Fortran\Win32\GetOpenFileName
MODULE m_open
USE comdlg32
USE user32 ! Interface for GetForegroundWindow
IMPLICIT NONE
CHARACTER(1), PARAMETER :: eot = ACHAR(0) ! end of text (end of C string)
CONTAINS
!-----------------------------------------------------------------
SUBROUTINE get_file(filename, filter)
IMPLICIT NONE
CHARACTER(*), INTENT(OUT) :: filename
CHARACTER(*), INTENT(IN ) :: filter
TYPE (T_OPENFILENAME) :: ofn
INTEGER :: istatus
ofn%lStructSize = sizeof(ofn)
ofn%hwndOwner = GetForegroundWindow()
ofn%hInstance = NULL ! hInstance
ofn%lpstrFilter = loc(filter)
ofn%lpstrCustomFilter = NULL
ofn%nMaxCustFilter = 0
ofn%nFilterIndex = 1 ! Specifies initial filter value
ofn%lpstrFile = loc(filename)
ofn%nMaxFile = LEN(filename) - 1
ofn%nMaxFileTitle = 0
ofn%lpstrInitialDir = NULL ! Use Windows default directory
ofn%lpstrTitle = loc('' // eot)
ofn%Flags = OFN_PATHMUSTEXIST
ofn%lpstrDefExt = loc('txt' // eot)
ofn%lpfnHook = NULL
ofn%lpTemplateName = NULL
istatus = GetOpenFileName(ofn) IF (istatus .eq. 0) THEN filename = '' ELSE filename = filename(1:INDEX(filename, eot)) END IF RETURN END SUBROUTINE get_file END MODULE m_open !================================================================== PROGRAM f_open USE m_open CHARACTER(*), PARAMETER :: filter ='ALL Files (*.*) ' // eot // '*.*' // eot // & 'Data Files (*.xy) ' // eot // '*.xy' // eot CHARACTER(512) :: filename = '' // eot CHARACTER(132) :: buff INTEGER :: i CALL get_file(filename, filter) OPEN (9, file = filename) DO READ(9, '(a)', END = 99) buff WRITE(*, *) TRIM(buff) END DO 99 STOP END PROGRAM f_open これは特にオプションなどを変えることなくコンソールアプリとしてコンパイル・実行できる。 サブルーチンのパラメータは、ファイルの拡張子の限定だ。 ファイル名を第一引数で返す。
>>986 文法的に厳密に言うと、101にとんだ後、どっちのDO...LOOPをまわせばいいのか
決めかねるので、コンパイラが文句を言う気持ちもよくわかる。
文脈的には外側のループを回したいのだろうと思う。
それならば、
C if (i.eq.2) go to 101
if (i.eq.2) CYCLE
で、元のをコメントアウトして、F90文法のCYCLEを使えばいい。
それがいやならABSOFTのMac版を買うのがよろしいw
30日くらいの試用もできたんじゃなかったかな?
あるいはg77ならいくかもしれない。
>>987 いやもう本当になんとお礼を言ったらいいのかわかりません
出来ました.完璧です.
buffのところをReal型の変数に変えたらファイルの中の数値もバッチリ読み込んでくれました
ありがとうございます
私の使ってるCompaqの方にもGetOpenFileNameのサンプルありました
(これがファイル名取得のサンプルってことにさえ気づいてませんでしたがw名前モロですね)
それより断然分かりやすくて良かったです
Compaqの方はどれがファイル名の引数かわからなかったですし
私はFortranを本当に少しかじったくらいなのでもう諦めてたんですが
(DO文が指定無しで無限に回ってくれることも知りませんでした)
本当にお手数おかけして申し訳ありません
ただちょっと楽をしたかっただけなのにここまでしてもらってw
このサンプルが理解できるくらいちょっとずつ勉強していきます
本当にありがとうございました
>>987 えらいな。
先頭のコメントをみてVisual Fortranのバージョンが11になっているのを今初めて知った。
>>975 コンパイル時のオプションのAUTODBLを使うという安易な手がある。
FTN77の場合は、
/DREAL
Enables the automatic generation of DOUBLE PRECISION and DOUBLE
COMPLEX for all REAL and COMPLEX and intrinsic functions.
あと、正攻法で行きたいのなら、メインルーチン、サブルーチン、関数、ブロックデータ等のすべての
プログラム単位の冒頭に、
IMPLICIT REAL*8(A-H,O-Z)
を入れるのが昔の定石。
べた書きの数値定数や複素変数は個別に対応しないと駄目だが・・・
>>816 マジレスするとだな
君が応援してる若手騎手を長らく見守って、
彼が中堅になり、やがてはベテランになるころにはわかるよ。
入力した実数を小さい順に並べるにはどうしたらよいのでしょうか?
>>994 WRITE(*,*) '小さい順に入力して下さい。'
READ(*,*) (A(I), I=1,10)
もしくは ソート でググれ
そんなことより、だれか次スレお願い
しまった、もうこんなレス番か・・・ テンプレを充実させようかと思ったが遅かったorz 次スレでやろう
埋め その1
999 :
デフォルトの名無しさん :2009/01/24(土) 18:56:40
ありがとう
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。