- ベストアンサー
なぜ計算結果が出力されないのか・・・
エラーも何もないプログラムなのに、計算されません。 答えは、401.0になるはずなのに・・ 理由がわかりません。 コード載せておくので、どなたかお願いします。 implicit real*8 (a-h,o-z) Parr_M=1.0d0 Temp=1.0d0 Mc=val_Mc (p,M_C_gamma,M_C_alpha) x=Mc+1.0d0 write(6,10) x 10 format(1H ,F9.3) end ーーーーーーーーーーーーーー real*8 function val_p (Parr_M) implicit real*8 (a-h,o-z) val_p=Parr_M(ix,iy)**3 return end ーーーーーーーーーーーーーー real*8 function val_Mc (p,M_C_gamma,M_C_alpha) implicit real*8 (a-h,o-z) val_M_C_alpha=M_C_alpha(Temp) val_M_C_gamma=M_C_gamma(Temp) p=val_p (Parr_M) * val1=val_M_C_alpha val2=val_M_C_gamma*p val=val1*val2 * val_Mc=val return end ーーーーーーーーーーーーーーー real*8 function M_C_alpha(Temp) implicit real*8 (a-h,o-z) M_C_alpha=Temp/2.0d0 return end ーーーーーーーーーーーーーーー real*8 function M_C_gamma(Temp) implicit real*8 (a-h,o-z) M_C_gamma=Temp return end ーーーーーーーーーーーーーーー 以上をはしらせると、 『forrtl: severe (157):Program Exception - access violation』 と出てきます。謎です。結果もちゃんと出る様に、F9.3で入力してるはずだが・・
- みんなの回答 (6)
- 専門家の回答
関連するQ&A
- 宣言文
以下の宣言文をimplicit noneで宣言したい場合、 どのようにしたらよいのか、教えて下さい。 implicit real*8 (a-h,o-z) parameter(maxX=500,maxY=500) parameter(xS=0.0d0,xE=1.0d0) parameter(yS=0.0d0,yE=1.0d0) parameter(numX=400,numY=400) parameter(nstepT=5000) parameter(nfile =200) * real*8 Tarr_M(0:maxX,0:maxY), Tarr_P(0:maxX,0:maxY) real*8 Earr_M(0:maxX,0:maxY),EParr_M(0:maxX,0:maxY) real*8 Parr_M(0:maxX,0:maxY), Parr_P(0:maxX,0:maxY) real*8 Vect_P(0:maxX,0:maxY,1:3)
- ベストアンサー
- その他(プログラミング・開発)
- 式の組み込み
implicit real*8 (a-h,o-z) y=2.0d0 k=1.0d0+y x=k+3.0d0 write(6,10) x 10 format(1H ,F7.3) end とすると、当然6.000が出力されます。ここにおいてk=1.0d0+yをfunction又は、subroutineで書こうと思い、 subroutineで書いたのを以下に載せます。 *main implicit real*8 (a-h,o-z) y=2.0d0 call setcns (y) x=k+3.0d0 write(6,10) x 10 format(1H ,F7.3) end *sub function setcns (y) implicit real*8 (a-h,o-z) k=1.0d0+y return end これでビルドすると、『Variable K is used before its value has been defined』と警告されます。 走らすと、3.000と表示され、k=・・が反映されていないようです。 どの様にしたらいいのか教えて下さい。
- ベストアンサー
- その他(プログラミング・開発)
- 引数に関して
例えば、 C,B(C),A(B)という3つの関数があるとき、 それぞれをfunctionで書こうとすると、 Bの引数は-(C) Aの引数は-(B) でいいのでしょうか!? Aのルーチンには見た目上Cはでてこないので(CはBに包括されているため)、引数はBだけでいいのでしょうか?(☆部分) 説明不足で伝わっていないといけないので、サンプル載せときます。 ☆ function func_A(B) or (B,C) implicit none real*8 func_A,func_B,B,val * B=funcB(C) * val=(1.0d0-B)*3.0d0+B*7.0d0 func_A=val return end ------------------------------------- function func_B(C) implicit none real*8 func_B,func_C,C,val * C=func_C * val=C+5.0d0 func_B=val return end ---------------------------------- function func_C implicit none real*8 val * val=3.0d0 func_C=val return end ------------------------- Aの引数としてCも載せるのが正しい気がしますが、自信がありません。ご意見聞かせて下さい。
- ベストアンサー
- その他(プログラミング・開発)
- 配列Xの平均値を求める関数副プログラムaver(x,n)の作り方
配列xに入っているデータの平均値を求める関数副プログラムaver(x,n)の作り方がよく分かりません。 function aver(x,n) implicit real*8(a-h,o-z) real*8 x(*) !!この部分が分かりません。!! return end 教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- 配列Xの最大値、最小値を求めるサブルーチンmaxminの作り方
配列Xに入っているデータの最大値、最小値を求めるサブルーチンmaxminの作り方を教えてください。(n:データ数) subroutine maxof(x,n,xmax,xmin) implicit real*8(a-h,o-z) real*8 C 最大値は変数xmaxに、最小値は変数xminに代入する !!この部分が分かりません!! return end 教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- UNIX フォートラン 数値計算精度
フォートランでの数値計算精度に関して困っております。 サンマイクロシステムズ社製、UNIX、Solaris10(64bit)において、 下のフォートランプログラム、 IMPLICIT REAL*8(A-H,O-Z) X=1.0D0 A=SIN(X) WRITE(*,100)A 100 FORMAT(F50.40) STOP END を実行させると、 A=0.8414709848078965048756572286947630345821 となり、16桁以降にも数値が出てきます。 これはなぜでしょうか? UNIXコンパイラの特徴なのでしょうか?
- 締切済み
- その他(インターネット・Webサービス)
- 配列 x に入っているデータの個数を求める関数の作り方
配列 x に入っているデータのうちで、値が正(つまり x(i) .gt. 0.0d0 ) であるデータの個数を求める関数 numpos(x,n) を作り方を教えてください。n はデータの個数。 implicit real*8(a-h,o-z) real*8 x(1000) dummy = rand(13) 乱数の初期化 n = 1000 do 10 i=1,n x(i) = rand(0)-0.4d0 テストデータ 10 continue write(6,*) 'numpos =', numpos(x,n) stop end function numpos(x,n) implicit real*8(a-h,o-z) real*8 x(*) この部分が分かりません。(関数副プログラムなので、関数の値、つまり正のデータの個数は、関数名と同じ名前の変数、つまり numpos という名前の変数へ代入すること、らしいです。) return end とても困っていますし、急いでいます。 誰か助けてください。 よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 結晶内の分子体積の計算方法
結晶空間内の原子の配位多面体体積の計算方法についてお尋ねします。 直交座標系であれば、ある四面体(配位多面体を四面体ABCDとすると)の体積Vは、 その空間内の座標A、B、C、Dから、行列式(グラム行列式?)によって、 “V = (1/6) |det(B - A, C - A, D - A)|”を使うと計算できます。 しかし、一般に結晶空間の表記は、直交座標系でないことがほとんどです。 例えば、以下のような三斜晶系という結晶系内に原子が配列しているとします。 ----------------------------------------------------------------- 【格子定数】 三斜晶系(格子長: a ≠ b ≠ c, 軸角: alpha ≠ beta ≠ gamma) a = 5.196, b = 5.355, c = 6.505, alpha = 69.22, beta = 88.69, gamma = 68.08, 【原子配列】 P (0.3712, 0.3538, 0.7827) O1 (0.1399, 0.6870, 0.6592) O2 (0.6900, 0.3711, 0.8348) O3 (0.2365, 0.1929, 1.0267) O4 (0.3860, 0.1686, 0.6070) ----------------------------------------------------------------- このとき、Pの周囲には4つの酸素が配位しており、PO4四面体(中心にPで酸素4つが 頂点となる四面体)を形成しています。そして、ある結晶計算ソフトを使うと、 このときのPO4四面体の体積は、“V = 2.63”と計算されます。 さて、このときのこのソフト内ではいったいどのように計算方法がなされているのでしょう。 いったん直交座標系に変換しているのでしょうか? 数学の専門家ではないので、出来るだけ専門用語を平たい言葉にして 説明をして頂けると大変ありがたいです。どうぞよろしくお願いします。
- ベストアンサー
- 数学・算数
- 計算量(オーダー)に関する計算
計算量に関する式で、わからないことがあります。 f(h)=g(h)+O(h^n),p(h)=q(h)+O(h^m),k=min(n,m)とした時、 1.f(h)+p(h)=g(h)+q(h)+O(h^k) 2.f(h)*p(h)=g(h)*q(h)+O(h^k) 3.f(h)/p(h)+g(h)/q(h)+O(h^k) らしいのですが、この3式が成立する意味がわかりません。k=max(n,m)だったら、成り立つような気がするのですが…。 誰か解説よろしくお願いいたします。
- 締切済み
- 数学・算数
- 配列xのヒストグラムを求めるサブルーチンhist(x,n,ndiv,count)の作り方
配列xに入っているデータのヒストグラムを求めるサブルーチンhist(x,n,ndiv,count)の作り方 が分かりません。 subroutine hist(x,n,ndiv,count) implicit real*8(a-h,o-z) real*8 x(*) integer count(*) C まずデータの最大値、最小値を求める: call maxmin(x,n,xmax,xmin) C xminからxmaxまでをndiv等分する。分割幅は dx = (xmax-xmin)/ndiv !!この部分のプログラムが分かりません!! return end 教えてください。 よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
補足
はい、1.5にしかなりません。書き間違えです。あと、Parr_M(ix,iy)は間違いです。正確にはx,y成分を含むParr_Mを計算していこうかと思っていますが、問題の筋に不必要なので、削除しています。Parr_M(ix,iy)は消し忘れです。 Parr_Mは変数です。 書いて頂いたもので走らせたのですが、*********でした。 計算エラーはでなかったのですが、その様に出力されました。 なので、確認のため、p,val_G_C_alpha,val_G_C_gammaを出力してみたのですが、pしか思い通り(1.0)にでませんでした。。。 (Mcのルーチンを消し、mainに直接val_G_C_alpha,val_G_C_gammaを返して試みたのですが・・・) よろしくお願いします。