質問編集履歴
3
fortranコードにprint文を二つ追加し、そのあとの実行結果にoutputの内容を書き換えました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -20,7 +20,11 @@
|
|
20
20
|
|
21
21
|
a=0.000000
|
22
22
|
|
23
|
+
1.5707963000000000 0.0000000000000000 4.59149455E-41
|
24
|
+
|
25
|
+
-469083744 -469083744.00000000
|
26
|
+
|
23
|
-
|
27
|
+
-469083744.000000
|
24
28
|
|
25
29
|
```
|
26
30
|
|
@@ -40,6 +44,8 @@
|
|
40
44
|
|
41
45
|
DOUBLE PRECISION MENSEKI=0.0
|
42
46
|
|
47
|
+
PRINT *,X,Y,WIDTH
|
48
|
+
|
43
49
|
DO I=0,10000000
|
44
50
|
|
45
51
|
MENSEKI=MENSEKI+DCOS(I*WIDTH+Y)*WIDTH
|
@@ -47,6 +53,8 @@
|
|
47
53
|
END DO
|
48
54
|
|
49
55
|
SEKIBUN=MENSEKI
|
56
|
+
|
57
|
+
PRINT *,MENSEKI,SEKIBUN
|
50
58
|
|
51
59
|
RETURN
|
52
60
|
|
2
Cコードの(*1*)の行がコメントアウトされていて出力例と生合成が取れなかったのでソース当該行の//の位置を変更しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
a = atof(argv[2]);
|
76
76
|
|
77
|
-
|
77
|
+
printf("b=%lf\na=%lf\n",b,a); //(*1*)
|
78
78
|
|
79
79
|
menseki = sekibun_(&b, &a);
|
80
80
|
|
1
otnさんの修正依頼に対応しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,15 +4,27 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
|
7
|
+
入力はプログラムの実行時にコマンドライン引数で任意の2数を指定して、出力は入力した2数の範囲でcos(x)を台形積分した結果として正しい値が帰ってくることを期待しています。
|
8
|
+
|
9
|
+
実際に実行したところ、実行する度に違う結果が出ました。(以下は入出力例です。)
|
10
|
+
|
11
|
+
```input
|
12
|
+
|
13
|
+
./JikkouFile_Name 1.5707963 0
|
14
|
+
|
15
|
+
```
|
16
|
+
|
17
|
+
```output
|
18
|
+
|
19
|
+
b=1.570796
|
20
|
+
|
21
|
+
a=0.000000
|
22
|
+
|
23
|
+
1581252688.000000
|
24
|
+
|
25
|
+
```
|
8
26
|
|
9
27
|
|
10
|
-
|
11
|
-
補足2:fortranにおけるX,Yの値はC言語からb,aを渡しており、そのb,aの値はプログラムの実行時にコマンドライン引数として渡しています。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
追記:毎回(*2*)の出力が異なるのだから、fortranで変数を初期化してないことが原因か?とも思いましたが、私の知りうる範囲では問題なく初期化できているようにも見えてお手上げです。
|
16
28
|
|
17
29
|
```fortran
|
18
30
|
|
@@ -62,7 +74,7 @@
|
|
62
74
|
|
63
75
|
a = atof(argv[2]);
|
64
76
|
|
65
|
-
//printf("b=%lf\n
|
77
|
+
//printf("b=%lf\na=%lf\n",b,a); (*1*)
|
66
78
|
|
67
79
|
menseki = sekibun_(&b, &a);
|
68
80
|
|