fortranでcos(x)をYからXの範囲で台形積分するプログラムをC言語のプログラムから呼び出すコードを書いています。
今回の質問はそのfortranの部分についてで、毎回異なった計算結果が表示されるのですが、fortran初心者すぎて何が理由かわかりません。以下がそのfortranのコードです。また、このコードを呼び出すCプログラムを一番下に置いておきます。
入力はプログラムの実行時にコマンドライン引数で任意の2数を指定して、出力は入力した2数の範囲でcos(x)を台形積分した結果として正しい値が帰ってくることを期待しています。
実際に実行したところ、実行する度に違う結果が出ました。(以下は入出力例です。)
input
1./JikkouFile_Name 1.5707963 0
output
1b=1.570796 2a=0.000000 3 1.5707963000000000 0.0000000000000000 4.59149455E-41 4 -469083744 -469083744.00000000 5-469083744.000000
fortran
1 DOUBLE PRECISION FUNCTION SEKIBUN(X,Y) 2 DOUBLE PRECISION X 3 DOUBLE PRECISION Y 4 INTEGER I 5 DOUBLE PRECISION WIDTH=(X-Y)/10000000 6 DOUBLE PRECISION MENSEKI=0.0 7 PRINT *,X,Y,WIDTH 8 DO I=0,10000000 9 MENSEKI=MENSEKI+DCOS(I*WIDTH+Y)*WIDTH 10 END DO 11 SEKIBUN=MENSEKI 12 PRINT *,MENSEKI,SEKIBUN 13 RETURN 14 END
C
1#include <stdio.h> 2#include <stdlib.h> 3 4extern double sekibun_(double *, double *); 5 6int main(int argc, char **argv){ 7 double a,b,menseki; 8 b = atof(argv[1]); 9 a = atof(argv[2]); 10 printf("b=%lf\na=%lf\n",b,a); //(*1*) 11 menseki = sekibun_(&b, &a); 12 printf("%lf\n",menseki); //(*2*) 13 return 0; 14}
回答2件
あなたの回答
tips
プレビュー