質問編集履歴

3

fortranコードにprint文を二つ追加し、そのあとの実行結果にoutputの内容を書き換えました。

2019/07/08 10:30

投稿

wanwannyaan
wanwannyaan

スコア31

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
- 1581252688.000000
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*)の行がコメントアウトされていて出力例と生合成が取れなかったのでソース当該行の//の位置を変更しました

2019/07/08 10:30

投稿

wanwannyaan
wanwannyaan

スコア31

test CHANGED
File without changes
test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
  a = atof(argv[2]);
76
76
 
77
- //printf("b=%lf\na=%lf\n",b,a); (*1*)
77
+ printf("b=%lf\na=%lf\n",b,a); //(*1*)
78
78
 
79
79
  menseki = sekibun_(&b, &a);
80
80
 

1

otnさんの修正依頼に対応しました

2019/07/08 10:21

投稿

wanwannyaan
wanwannyaan

スコア31

test CHANGED
File without changes
test CHANGED
@@ -4,15 +4,27 @@
4
4
 
5
5
 
6
6
 
7
- 補足:Cプログラムについて、同じ(*1*)出力に対して、(*2*)の出力が毎回異なります。そため、fortranまはfortranC言語のの受け渡しに問題のかな考えています。
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 a=%lf\n",b,a); (*1*)
77
+ //printf("b=%lf\na=%lf\n",b,a); (*1*)
66
78
 
67
79
  menseki = sekibun_(&b, &a);
68
80