前提・実現したいこと
cos(x)のxがa~bの面積を、矩形分積で求めるプログラムで、計算はFORTRAN側で行いたいです。
また、実行時にコマンドライン引数a,bを指定することで面積を求めるように実現したいです。
計算やコマンドラインからの受け取りは実現できているのですが、FORTRANへの受け渡しがうまくいかないです。。
ソースコード
FORTRAN77
1 DOUBLE PRECISION FUNCTION SEKIBUN(A, B) 2 DOUBLE PRECISION X 3 DOUBLE PRECISION I 4 DOUBLE PRECISION AREA 5 DOUBLE PRECISION DIV 6 7 X=B-A 8 DIV=100000000.0 9 I=X/DIV 10 11 WRITE (*, *) A 12 WRITE (*, *) B 13 14 DO WHILE ( I .LT. B ) 15 AREA=AREA+((DCOS(I))*(X/DIV)) 16 I=I+(X/DIV) 17 END DO 18 19 SEKIBUN=AREA 20 21 RETURN 22 END 23
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_c,b_c,area; 8 a_c = atof(argv[1]); 9 b_c = atof(argv[2]); 10 printf("a_c==%lf,,,b_c==%lf\n",a_c,b_c); 11 12 area = sekibun_(&a_c, &b_c); 13 printf("面積%25.15lf\n",area); 14 15 return 0; 16} 17
出力結果(ターミナル)
$ ./sekibun 0 1 a_c==0.000000,,,b_c==1.000000 0.00000000 1.87500000 面積 0.954085769656684
コマンドラインからの受け取りや積分の計算そのものはできているのですが、CからFORTRANの関数に値を渡す際に、1.0が1.875000のように変わってしまいます。
試したこと
printfで細々とデバッグしたのですが、関数に値を渡す直前ではしっかりと値も合っていて、渡した直後に値が変わってしまいます。。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/02 00:57