トップページ⇒tech
836コメント331KB

Fortran

■ このスレッドは過去ログ倉庫に格納されています
0001パッキーNGNG
Fortran90をただでコンパイルする方法はないでしょうか?
0232デフォルトの名無しさんNGNG
M系列
0233225NGNG
>>231
そうですね、ありがとうございました。
0234デフォルトの名無しさんNGNG
ran()

http://www.xlsoft.com/jp/products/vtune/download.html

↑にも日本語のマニュアルがある
0235デフォルトの名無しさんNGNG
>>234
あ、6.0の日本語マニュアル出てたんだ。気が付かなかったサンクスコ。
0236デフォルトの名無しさんNGNG
やっと出たか
0237デフォルトの名無しさんNGNG
>>205

行列演算になるとFORTRANの方が速い(2倍以上高速になることはザラ)
同じ数値計算アルゴリズムをVC++6プロフェッショナルとVisualFORTRAN6
の両方で比較したことがあったが、FORTRANの方が4〜6倍速くて鬱になった
ことがある。

>あとこれは聞いた話ですが、Fortranの最適化がCより優れている点は
>タコいコードを書いてもそれなりに最適化してくれることだとか。

禿げしく同。C++では注意深くコードを書かないと糞みたいに遅くなる
こと有。

FORTRAN77:言語が単純なので数値計算の問題に集中できる。
C++ :言語が複雑で完全にマスターするのが大変。
数値計算の問題に集中できない。気が散る。

C++を諦めてFORTRANに戻ろうかとも考えている。

でも、あのC++の柔軟性やSTLの便利さは捨て難いけどなぁ。
0238デフォルトの名無しさんNGNG
話がCからC++にスレかわっててゴメン。



0239デフォルトの名無しさんNGNG
しかもFortranスレだという罠
0240のとNGNG
windows2000 & VisualFortran6.6で動くプログラムをwindowsXP環境に
すると、次のようなエラーになりコンパイルできません。

/subsystem:console
/entry:mainCRTStartup
/igonore:505
/debugtype:cv
/debug:minimal
/pdb:none
C:\DOCUME~1\dfor.lib
libc.lib
dfconsol.lib
dfport.lib
kernel32.lib
/out:test.exe
LINK : fatal error LNK181: cannot open input file "C:\DOCUME~1\dfor.lib"

きっとリンクするときにC:\DOCUME~1\dfor.libの箇所がだめなんだと思うんですが
(実際そのフォルダにはdfor.libはない)、どうしてこんな設定になってるんで
しょうか?
どなたかわかる方いましたら教えてください。
0241デフォルトの名無しさんNGNG
>>240
プロジェクトフォルダごとコピーしたんじゃない?

新規プロジェクトで
ソースファイルだけコピーしてみ
0242のとNGNG
>>241
解決しました。
ありがとうございます。
0243デフォルトの名無しさんNGNG
乱数を300ふって、それの分布をチェックしたいんですけど、
うまくいかないんです。誰か助けて。
0〜800くらいまでの乱数を25刻みでいくつづつカウントされるか
チェックしたいんですけど、if文がうまく書けてないみたいで・・・
0244243NGNG
dimension T(i),Y(i) T(i)に乱数が入ってて、
do j=1,25  箱25個
Y(j)=0 カウント数の箱の初期化
end do

do i=1,300
if(T(i).gt.0.and.T(i).lt.25)
Y(1)=Y(1)+1
else if(T(i).gt.25.and.T(i).lt.50)
Y(2)=Y(2)+1
・・・・・・・・・
・・・・・・・・・
else
Y(25)=Y(25)+1
end if
end do

do ii=1,25
write(*,*)Y(ii)
end do

これじゃY(1)にカウントが150とかいっちゃって、
乱数が一様に分布されなくなっちゃいます。
一様になるはずなんです。
どこが違いますか?
0245デフォルトの名無しさんNGNG
Y(i)ってInteger宣言になってないとまずいと思うんだけど、
もちろんそうなってるんですよね?
0246デフォルトの名無しさんNGNG
Tに実数型の値(乱数)が入っているのなら、勿論INTEGER宣言する必要もないのだが、
Yは明らかに整数型のつもりで使っているらしいから、当然TもINTEGER宣言してある
のでしょう。
いずれにせよ、>>244のコーディング通りなら正しく出ると思います。正しく出ない
原因は(1)実際のコーディングが>>244の通りでない (2)Tに正しい一様乱数が
入っていない。実数で入っている乱数をEQUIVALENCE的に整数型で受けているといった
場合もこの(2)に含まれる。
考えられる原因はこれくらいですかね。
それよりも>>244のロジックに注文をつけたくなります。これだとelseifのネストが
25個もできることになりますよね。これはいかにもかったるいでしょう。
私なら次のようにします。
DO I=1,300
J=T(I)
J=(J-1)/25 + 1
IF ( J .GT. 25 ) J=25
Y(J)=Y(J)+1
END DO
0247デフォルトの名無しさんNGNG
擬似逆行列を解くルーチンってどっかにないでしょうか?
LAPACKだとこれが出来ないっぽいんですが。
何かヒントいただければお願いします。
0248デフォルトの名無しさんNGNG
入力した5つの定数の中から最大値を出力するプログラムおしえてくだせえ!
最大値を出すやりかたがわからないんですが・・
0249デフォルトの名無しさんNGNG
そんなもん max(x1,x2,x3,x4,x5) ってやってやればどれか分かると思うんだが。
0250デフォルトの名無しさんNGNG
if(条件)文1
文2
とあるとき、if文の影響範囲は文1と文2の両方に及びますか?
thenがあるときとないときでは違うのでしょうか?
0251デフォルトの名無しさんNGNG
>>250
おやおや、無視されていますね。
FORTRANから離れて大分経つので自信はないが、私なりの回答を。

ifは文1にしか影響しない。文2はただの独立した文。
if(条件)文1  が、一つの「if文」と見なされるでしょう。
THENをつけた場合は、ELSEかENDIFかが出てくるまでの間がまとめて、
一つの「THEN節」として処理されるのではないでしょうか?
以上、酔っぱらいながらの、昔を思い出しての回答。
間違っているところがあったら、誰か訂正よろしくね♪
0252デフォルトの名無しさんNGNG
>>210
大学の本屋にいけないひとは
こういうとこで買うしかないのかな。
http://www.bidders.co.jp/item/10533308

 
近所の古本屋でも見かけないし
0253デフォルトの名無しさんNGNG
watcom fortran 11.0cをwindows XPで使いたいんですが、どうすれば良いでしょうか?
0254デフォルトの名無しさんNGNG
>>253
サポートに電話しる!
0255デフォルトの名無しさんNGNG
引数を1つ、出力は配列(3)を2つ出すプログラムをつくりたいです。

READ(5,*)引数
DIMENTION 配列a(3)
DIMENTION 配列b(3)
Z = hoge(引数)
(略)
END

FUNCTION hoge(引数)
DIMENTION 配列a(3)
DIMENTION 配列b(3)
なんたらかんたら
RETURN
END

でいいのでしょうか?
0256名無しさんNGNG
>>255
読みにくいです.

PROGRAM TEST

REAL*4 A(3),B(3)
INTEGER*4 I
INTEGER*4 J
READ(5,'(1I)') I

CALL HOGE(I,A,B)

WRITE(6,'("A:",3(1X,F5.2))') (A(J),J=1,3)
WRITE(6,'("B:",3(1X,F5.2))') (B(J),J=1,3)

STOP
END

SUBROUTINE HOGE(I,A,B)
INTEGER*4 I
REAL*4 A(3),B(3)
INTEGER*4 J

DO J=1,3
A(J)=FLOAT(I*J)*0.5
B(J)=FLOAT(I)*2./FLOAT(J)
ENDDO

RETURN
END
0257デフォルトの名無しさんNGNG
>>256
そういう読みやすい書き方を紹介してくれる
書籍かサイトご存知ないでしょうか?
0258デフォルトの名無しさんNGNG
>>256
END DOってどのコンパイラでも通るのか?
まぁFORTRANは77しか使ったこと無いから90,95とかはわからんが.

>>257
じゃぁせめて配列サイズも引数に渡してあげましょう.
引数爆発起こしますが変更に耐えられません.
0259デフォルトの名無しさんNGNG
おぉブレーネリあなたのお家はどこ?

私のお家はもー無いの 去年火事で燃えちゃった

ヤッホー Frotranランラン ヤッホー Frotranランラン
ヤッホー Frotranランラン ヤッホー Frotranランラン

ヤッホー Frotranランラン ヤッホー Frotranランラン
ヤッホー Frotranランラン ヤッホッホー!!
0260デフォルトの名無しさんNGNG
tast
0261デフォルトの名無しさんNGNG
>>259
なつかすぃなあ。デバッグで行き詰まったりしたとき、
ヤケクソでヤッホー フォートランランラン…♪なんて
やってごまかしたこと数知れず(爆
ところで、>私のお家はもー無いの 去年火事で燃えちゃった
っていうのは故意の替え歌? あと「Frotran」も、わざと?
意味が分からん(汗

>>257
そういうのはセンスと経験(慣れ)の問題で、本を読んだだけで身に付くもの
ではないと思いますよ。とにかく実践ありき。ゴリゴリコーディングして、
経験豊かな人にボロクソにけなされるうちに、コツが分かってきます。
FORTRANに限らず、どんな言語でもそうですけどね♪
0262デフォルトの名無しさんNGNG
♪の人キタ━━━━(゚∀゚)━━━━ッ!!
0263デフォルトの名無しさんNGNG
替え歌連続書き込みしまくって、疎んじられてるヤシが吸い寄せられてきた事だし、
今日のfortranスレはお開きって事で。
0264デフォルトの名無しさんNGNG
>>258
DO 10 I=1,10
WRITE(6,'(1I2)') I
10 CONTINUE

ですか?
0265デフォルトの名無しさんNGNG
>>264
うん.ラベル管理が死ぬほど億劫だがそうしてる.
gnuと,最近のSunのコンパイラは通るらしいけど,
古めのWSで通らなかった痛い経験があるので使わないことにしてる.
規格厨じゃないが規格外だし
0266デフォルトの名無しさんNGNG
F77以前で規格外ですか?
0267259NGNG
綴り間違えた

火災保険は入っていたけど、子供は天国へ逝っちゃった。
かみさんとも別れちゃった。


おぉブレーネリ 私の居場所はどこ?
0268名無しさん@XEmacsNGNG
IF ( A NE 0 ) THEN
A = SQRT(ABS(A))
ELSE
A = 0
ENDIF
だっけ?
0269デフォルトの名無しさんNGNG
IF ( A .NE. 0 ) THEN
 A = HAGE
ELSE
 A = MAGE
ENDIF

比較演算子と論理演算子はドットで囲まないと
0270名無しさん@XEmacsNGNG
10年やっても2年やらないと忘れるもんだな・・
0271デフォルトの名無しさんNGNG
書式なしで書かれたバイナリデータを、違うコンパイラで
読む方法はないでしょうか?

同じソースでもコンパイラによってはerror during read と出て
読み出しすらできない場合や、読めるけど中身のデータがおかしく
なる場合があります。
readの際にrecl、convert等を適当に指定したりしてみたのですが駄目でした。

書き込みをしたコンパイラを使えばいいのですが、計算時間より
転送時間の方が何十倍も時間がかかってしまうという環境なので
できれば手元のマシンで処理したいのです。
0272デフォルトの名無しさんNGNG
それぞれのマシンの機種は?
エンディアンが違うんじゃないのかねえ。
0273デフォルトの名無しさんNGNG
Compaq Alphaのワークステーション(リトルエンディアン)の
FORTRANだと、コンパイルする時にオプションを指定すれば
ビッグエンディアンのデータをそのまま読めた。
--convert bigendianだったかな。
0274デフォルトの名無しさんNGNG
>>271
odとか、バイナリエディタ(bviとか)でデータの並びを確認しては
どうでしょうか?

FORTRANでビット演算は出来ないという理解は正しいでしょうか?
0275271NGNG
>>272,273,274
コンパイル時にビッグエンディアンを読み込みするオプションつけたら
うまくいきました。ありがとうございました。
0276デフォルトの名無しさんNGNG
ビット演算は一応出来るはず。
LSHIFTとかANDとかあるんだが,
富士通とSunとGNUでは存在を確認した
0277デフォルトの名無しさんNGNG
Fortran90の枠組みで、指定したバイト数からなる、任意型のデータ
を書き出すにはどうすればいいのでしょうか。

Cで言えば、
struct SomeType x ;
FILE* fp ;
fwrite( (void*)&x , sizeof( SomeType ) , 1 , fp ) ;
ということがやりたいです。これには、構造体 SomeTypeを
1バイトポインタにキャストできる必要があります。


・書式なし逐次記録で書くと、先頭にバイト長が入ってしまう
REAL*8 :: X(3)
OPEN(98,'a.dat',FORM='UNFORMATTED',ACCESS='SEQUENTIAL)
WRITE(98) X

16進Dump

18 00 00 00 | x(1)のイメージ | x(2)のイメージ | x(3)のイメージ |

(つづく)
0278デフォルトの名無しさんNGNG
(277のつづき)
・FORTRAN77が引数の型を調べないことを利用して、INTEGER*1の配列として
任意の型を受け取って書く。
 以下のようにコーディングできるが、正当な書き方ではない。

SUBROUTINE BWRITE( UnitNo , Buf , N , POS )
INTEGER :: UnitNo , N
INTEGER*1 :: Buf(N)
INTEGER :: I
DO I=POS,POS+N-1
WRITE(UnitNo,REC=I) Buf(I)
END DO
END SUBROUTINE BWRITE

CALL BWRITE(98,X,24,1)
0279デフォルトの名無しさんNGNG
みなさん、はじめまして。
以前FORTRAN77を勉強し、最近、構造型が便利だということでF90を
勉強しだしていますが構造型で少しわからないところがあります。

たとえば
TYPE MyClass1
real :: rdum
integer :: idum
END TYPE MyClass1

としておき、さらに

TYPE MyClass2
TYPE(MyClass1) , ALLOCATABLE :: tdum(:,:,:)
END TYPE
とするとエラーが起こります。
このように自分が作成したTYPEの中でALLOCATABLEを宣言することは無理なのでしょうか?
もし解決方法をご存知の方がいらっしゃったら教えていただけないでしょうか?
よろしくお願いします。

それでは失礼します。
0280デフォルトの名無しさんNGNG
そりゃあ、構造体のサイズは一定でないとまずいでしょ。
POINTER使えば?
0281デフォルトの名無しさんNGNG
ちょっとお知恵をお貸し下さい。

LINUX上のコンソールで走らせるプログラムを書いているんですが、

  Input reading file name > ここのファイル名を入力

とかいう風にやりたいんですが、

write(*,1000)
read(*,1010) FILE

1000 format('Input reading file name > ')
1010 format(A16)

と言う風にやると、“Input reading file name > ”のところで改行されてしまうんです。
この改行を抑制する方法って無いでしょうか。
0282デフォルトの名無しさんNGNG
>281

ぎゃぁ!!
固定Formatで書いてるつもりなのに………(汗)
上のソースは固定formatです。

書き忘れましたが環境は、VineLinux2.5にAbsoftのProFortran7.5をインストールしています。
0283デフォルトの名無しさんNGNG
>>281
$を付けると改行しません.
HP FORTRANだけの独自拡張だと思っていたのですが,
Linux上のf2c,g77-3.2どちらでも使用できました.
g77-2.95は試していません.

program test
implicit none
integer*2 i

write(6,'("Input number: ",$)')
read(5,'(i2)') i
write(6,'("The number is ",i2)') i

stop
end
0284デフォルトの名無しさんNGNG
>>283

ありがとうございます!
試したところうまくいきました。

ところで、これってFortran77/90/95とかの規格には含まれてないんですよね?
0285デフォルトの名無しさんNGNG
>>284

また脊髄反射でレスをカキコしてしまった………。
私は、ProFortranを使ってはいますが、未だに固定フォーマットでプログラムを書いてますし、
Fortran77の教科書で書いてます。
でも、もう卒業だからFortranをこれ以上使うとも思えないんですよね………。
0286デフォルトの名無しさんNGNG
>>281
構造体のサイズはいじれないんですね。
POINTERですか、一度勉強してみます。

とりあえずできないことが確認できただけでもよかったです。
どうもありがとうございました。
0287デフォルトの名無しさんNGNG
>>284
> ところで、これってFortran77/90/95とかの規格には含まれてないんですよね?

HP FORTRANのマニュアルにはFORTRAN77にはない拡張だと書いてありましたが,
FORTRAN90や95の規格に含まれているかどうかは分かりません.
ちなみにCompaq FORTRANでも有効でした.
0288デフォルトの名無しさんNGNG
>>280
やってみたんですがPOINTERを使ってもターゲットになる構造体のサイズに依存するんで
構造体の内部変数の配列のサイズを変更した構造体を作ることはできないのでは
ないのでしょうか?

何度もすみませんm(_ _)m
0289デフォルトの名無しさんNGNG
>287

そうですか………。
Fortran90の本を読んでもでていないんで、多分拡張ですよね。

それにしても、Fortran77の本に書かれていた、各行一文字目での制御って
普通の画面でも有効なんでしょうか。
<うちの環境では駄目でした

今更(只今M2で就職決定済み)でFortran覚えても意味無い気がして来たけど趣味
でやってます(笑)
0290デフォルトの名無しさんNGNG
>>289
> それにしても、Fortran77の本に書かれていた、各行一文字目での制御って
> 普通の画面でも有効なんでしょうか。
> <うちの環境では駄目でした

意味が分からないのですが、

c comment

のことでしょうか?
「Fortran77の本」とは具体的に何と言う本か?
「普通の画面」とは何のこと?
「うちの環境」とはどんな環境?
「駄目」とはどういう状態のこと?
0291デフォルトの名無しさんNGNG
>>290

説明不足でご免なさい。出力を改行させたくない場合、
write(*,'+','kaigyousimasenn')

と言う用にすれば出来ると

ttp://www.amazon.co.jp/exec/obidos/ASIN/4627839812/qid=1035696552/sr=1-3/ref=sr_1_0_3/250-6779604-7744248
ttp://www.amazon.co.jp/exec/obidos/ASIN/4563007455/qid=1035696494/sr=1-19/ref=sr_1_0_19/250-6779604-7744248

の本に書いてあったんです。
このようにしてみたのですが、そのまま画面と言うかターミナルに表示されてしまいまして。

普通の環境とか普通の画面とか言うのはただの私の先入観です。
駄目というのは、改行させないと言う効果が得られず、制御文字(この場合は+)がそのまま
コンソールに表示されてしまったと言うことです。
本には『プリンタ制御』と書かれていたので、コンソールには無効なのかな、と思っています。

環境はLinuxにAbsoftのProFortran7.5をインストールしています。
0292デフォルトの名無しさんNGNG
>>291
> 説明不足でご免なさい。出力を改行させたくない場合、
> write(*,'+','kaigyousimasenn')
> と言う用にすれば出来ると
> の本に書いてあったんです。
> このようにしてみたのですが、そのまま画面と言うかターミナルに表示されてしまいまして。

283に書かれたやり方で良いのではないでしょうか?
それでは問題があって、他のやり方を探していると
いうことでしょうか?
0293デフォルトの名無しさんNGNG
>292

いえ、正直なところ、ただの好奇心の範囲でして。
お騒がせして申し訳ありません。

問題自体はあれで解決しました。
お付き合いいただき、どうもありがとうございます。
0294デフォルトの名無しさんNGNG
http://yahooo.s2.x-beat.com/
0295デフォルトの名無しさんNGNG
fortran77なんですけど、コンパイルができません。
どこが違っているのか、おしえてください。おねがいします。

c ex 2.1.1 *** wa,sa,seki,sho,bekijyou no keisan ***
implicit double precision(a-h,o-z)
open(15,file='date211.inp')
open(25,file='date211.out')
read(15,*) a,b
wa = a+b
sa = a-b
seki = a*b
sho = a/b
beki = a**b
c
write(25,*) 'a = ',a, 'b = ',b
write(25,*)
write(25,*) 'wa = ',wa,'sa= ',sa,'seki = ',seki,'sho = ',sho,
& 'beki = ',beki
c
write(6,*) 'a = ',a, 'b = ',b,'c = ',c,'d = ',d
write(6,*)
write(6,*) 'wa = ',wa,'sa = ',sa,'seki = ',seki,'sho = ',sho,
& 'beki = ',beki
stop
end

ちなみに、頭が全部そろってますが、cや&は7列目以降にはかかれていません。
こぴぺしたものなので・・・。
0296デフォルトの名無しさんNGNG
>>295
Salfordのお試し版とg77なら
cとdが未初期化だゴルァ
と怒られた以外、ちゃんとコンパイルできたぞ。
0297デフォルトの名無しさんNGNG
バッファリングされているFortran記録を、ファイルにフラッシュ
させるにはどうしたらいいのでしょうか?
0298デフォルトの名無しさんNGNG
いかにもOSあるいはコンパイラに依存しそうですが。
Visual Fortran だと、FLUSH あるいは COMMITQQ なんてのがありますが。
使用コンパイラのリファレンスを見るべし。
0299デフォルトの名無しさんNGNG
>>295さん、どうもありがとう。異常終了が起こるのは、やっぱり、マシンがだめなのかなぁ・・・。
0300デフォルトの名無しさんNGNG
これも、どこが違うかわらからないので、教えていただけませんか。ずうずうしくてすみません。
c ex 2.2.3 addition of angle
implicit double precision(a-h,o-z)
integer dg1,sc1,dg2,sc2,dg,sc
date pi/3.141593/
write(25,*) 'input dg,mn,sc'
write(6,*) 'input dg,mn,sc'
open(15,file='date223.inp')
open(25,file='date223.out')
read(15,*) dg1,mn1,sc1
read(15,*) dg2,mn2,sc2
r=pi/180.0
c
rd1=((sc1/60.0+mn1)/60.0+dg1)*r
rd2=((sc2/60.0+mn2)/60.0+dg2)*r
rd=rd1+rd2
c
wk=rd/r
dg=wk
wk=(wk-dg)*60.0
mn=wk
sc=(wk-mn)*60.0+0.5
write(25,*) 'rad1= ',rad1, 'rad2 = ',rad2,'rd=',rd
write(25,*)
write(25,*) 'angl1 = ',dg1,'deg ',mn1,
& 'min',sc1,'sec'
write(25,*) 'angl2= ',dg2,'deg',mn2,
& 'min ',sc2',sec'
write(25,*) 'total=',dg,'deg',mn,
& 'min',sc,'sec'
stop
end
0301デフォルトの名無しさんNGNG
>>299
I/O の番号を変えてみるってのは?
0302デフォルトの名無しさんNGNG
>>300
> これも、どこが違うかわらからないので、教えていただけませんか。ずうずうしくてすみません。

「違う」って何でしょう。お使いの環境が不明。
コンパイルに失敗するのか。それともコンパイルは
出来ても実行結果が意図と違うのか。

気付いたところ。
openでstatusを指定していない。
scは整数型として宣言しているのにsc=...の文は60.0を
乗じたり0.5を加えたりしている。更に倍精度実数wkから
整数mnをキャスティングなしで引いている。
0303デフォルトの名無しさんNGNG
closeしなくていいの?
pi=4.*atan(1.)のほうがよくない
0304デフォルトの名無しさんNGNG
状況を説明してなくて申し訳ないです。
コンパイル時に、エラーがでるのです。
教科書は、型宣言をしておらず、dateから始まっています。
だから、型宣言が違うということでしょうか。
あまり詳しいことを学ばないまま、レポートが出てしまったので、困っています。
どのように直せばよいのでしょうか
ご指導のほど、お願いします。
0305デフォルトの名無しさんNGNG
>>304

dateはいかがなものか。
0306デフォルトの名無しさんNGNG
>>300
コンパイラのエラーメッセージ読んでみれば?
もしかしたら、HITACのようなTSS環境だと、メッセージでないのかな?
(ううなつかしい)
あるいは授業のハンドデバッグの宿題だったりして。

で、まじれす
4行目 date でなく、dataでしょう。
22行目 出力変数は、rad1,rad2ではなく、rd1, rd2 でしょう。
27行目 sc2のあとのアポストロフィの位置が間違えてます。

当然、'date223.inp'に適切なデータが記述されていないと
ランタイムで落ちます。

0307306NGNG
304を読んでなかった。
レポートかぁ。
書かなきゃよかったかな。

いずれにせよ、業務上であれば、300のようなコードかいてきたら、
殴ります。
0308デフォルトの名無しさんNGNG
>>306 ありがとうございました。ちゃんとコンパイルできました。
しかし、実行段階でやはり、コアダンプします。
学校のPCのため、設定はいじれないんですが…。
どうすればよいのでしょうか

0309デフォルトの名無しさんNGNG
>>308
クラッシュする位置を特定してどうしてそこでクラッシュするか考える

やりかたとしては
プログラムをよく読んで脳内で実行
もしくはデバッガをつかう
デバッガが使えなければいちいち write して、
各時点で各変数の値がどうなっているか、どこでクラッシュするか確認する
0310デフォルトの名無しさんNGNG
>>308
設定でなくて,プログラム自体が間違っているのでしょう.
図書館でFORTRANの参考書を借りるとかして下さい.
このスレを参考書にするのはどうかと思います.
0311デフォルトの名無しさんNGNG
>> 298
ありがとうございます。処理系に依存するとは知りませんでした。
実際に僕が使っているFujitsu Fortranでは、サービスルーチン
として(つまり組み込みでない)FLUSH()関数が用意されていました。
0312デフォルトの名無しさんNGNG
せめて、
open(15,file='date223.inp', status='OLD') くらいは
かいてみそ
date223.inp が無いんじゃないの?

0313デフォルトの名無しさんNGNG
やりすぎ
0314デフォルトの名無しさんNGNG
fortranでreal*8の変数zに1.1を代入して、
それをc++のdowbleの変数に渡したとき、1.10000002384186という値に
化けてしまいます。この数値の再現性は100%です。
なんでごみが混じってしまうのでしょうか。それへの対応法はありますでしょうか?
アドバイスお願いします。
0315デフォルトの名無しさんNGNG
スペルdoubleですね。恥ずかしい
VF6.5、VC++6でやってます。
0316デフォルトの名無しさんNGNG
FORTRAN上で、zに単精度の1.1を代入していませんか?

コンパイラオプションにもよりますが、単純に 1.1 と書くと、通常、
単精度になりますから、せいぜい10進数では7桁程度の精度しかありません。

Z=1.1D0 と書けば、倍精度になりますから、15桁くらいの精度になります。

0317デフォルトの名無しさんNGNG
倍精度拡張オプションをつかえばいいのかな?
0318デフォルトの名無しさんNGNG
C言語ソースからPAD図を生成するツールはあるけど。
fortranソースからフローチャート生成するツールって
ないっすか?検索したけどみつからない。個人的に
ツール作成した神はいませんか?
0319デフォルトの名無しさんNGNG
>>318

>>34-38 は?
0320デフォルトの名無しさんNGNG
あーいうのじゃなくて簡単に
操作ができるツールみたいなの探してる。
やっぱねぇのかなぁ?ベクターさんではみつからないし。
>>319
0321デフォルトの名無しさんNGNG
フォートランで、C言語で作ったDLLファイルを使いたいんですが、
それを勉強するのに適した本とか、WEBページとかありますか?
0322デフォルトの名無しさんNGNG
>>321
Windowsであれば、まずはVisualFortranのヘルプとか
ttp://www.compaq.co.jp/products/dvf/visual/jhelp.html
「言語が混在したプログラミング」として、少しばかり記述がある。
「勉強」には少々貧しい内容だが。

このヘルプ、VFもっていなくても
ランゲージリファレンスとして有効だと思うんだけど。
0323デフォルトの名無しさんNGNG
教えていただきたいのですが

Fortranでの計算結果をアニメーションで表したいと思っています.
(例えば振り子の運動など)
どのような方法がありますでしょうか?
Fortranには
Visual Fortran 6.0を用いております.

ご教授ください宜しくお願いします.
0324デフォルトの名無しさんNGNG

 fortran95の無料コンパイラって
http://www.fortran.com/
ぐらいしかないかな。
0325315NGNG
>>323
fortranで計算結果を適当に書き出して(DATとか)それをVBとかで表示じゃだめ?
俺はそうしてますた・・いちばん簡単だと思う。

>>316 >>317
ありがとうございました。これってFORTRAN使いの方(に限らない?)にはあたりまえの事なんですね。
こんなこと聞いてアホかと怒られました。勉強させていただきました。
0326デフォルトの名無しさんNGNG
AIX上のXLFortran使っている方がいれば教えてください。
KAP or VAST-2 最適化プリプロセッサって、
シングルスレッドのプログラムでも有効ですか?
数値解析のプログラムを使っているんですが、
もしかしたら必須アイテム?
0327デフォルトの名無しさんNGNG
fortranスレあったんですね
最近、数値計算メインをC++からFortran95に乗り換えました
F77->QB->Pascal->C->C++,VB->C++,VB,perl->LabView,F95,C++,VB,ruby
で、結局fortranに帰ったと  Fortran95(・∀・)イイ!!

安いコンパイラと安い解説書があればもっと流行るのになぁ

>323
VFならQuickWinが付属していますので、それを使ってください。
ただし、汎用性もなくなるのでお勧めできませんが。
ヘルプで
Using QuickWin->Displaying Graphics Output
を参照のこと
0328デフォルトの名無しさんNGNG
>>327
よろしかったら数値計算部をC++からFORTRANに乗り換えられた理由を教えて
いただけないでしょうか?
0329デフォルトの名無しさんNGNG
C++だと遅くてやってられないからです。
まあ、配列の仕様が違うので仕方ないですが、
CやC++は数値演算には向きませんね。
0330デフォルトの名無しさんNGNG
>>329
「数値演算」といっても規模によるだろうけど、
具体的には C/C++ とどの程度の差がでるものなの?

俺は C/C++ で数値計算をずっとやっててそれしか知らないので
ちょっと興味がある。
0331デフォルトの名無しさんNGNG
C++はvector使ったら遅いかもしれんけど、Cは速いとおもうけどなあ。
アセンブリ出力見てみれば?
■ このスレッドは過去ログ倉庫に格納されています