回答編集履歴

1

追記

2018/09/04 07:31

投稿

asm
asm

スコア15147

test CHANGED
@@ -21,3 +21,79 @@
21
21
  ダメだったら`double ***sk,**gr;`を`volatile double ***sk,**gr;`に書き換える事になるかと思います。
22
22
 
23
23
  (ただし、最適化の効果は著しく落ちる事でしょう)
24
+
25
+
26
+
27
+ ---
28
+
29
+
30
+
31
+ **追記**
32
+
33
+ ```c
34
+
35
+ //--
36
+
37
+ double tmp = 0.0; // 追加
38
+
39
+ for(i=0;i<Lx;i++){
40
+
41
+ for(j=0;j<Lx;j++){
42
+
43
+ if(i<=Lx/2-1){
44
+
45
+ if(j<=Lx/2-1){
46
+
47
+ l=sqrt(i*i*dx*dx+j*j*dx*dx);
48
+
49
+ }
50
+
51
+ else{
52
+
53
+ l=sqrt((Lx-i)*(Lx-i)*dx*dx+(Lx-j)*(Lx-j)*dx*dx);
54
+
55
+ }
56
+
57
+ }
58
+
59
+ else{
60
+
61
+ if(j<=Lx/2-1){
62
+
63
+ l=sqrt(i*i*dx*dx+j*j*dx*dx);
64
+
65
+ }
66
+
67
+ else{
68
+
69
+ l=sqrt((Lx-i)*(Lx-i)*dx*dx+(Lx-j)*(Lx-j)*dx*dx);
70
+
71
+ }
72
+
73
+ }
74
+
75
+
76
+
77
+ if(r<=l&&l<r+dx){
78
+
79
+ // gr[k][e]=gr[k][e]+sk[i][j][e];
80
+
81
+ // ここにprintfすると結果が一致する
82
+
83
+ tmp += sk[i][j][e]; // 変更
84
+
85
+ }
86
+
87
+ }
88
+
89
+ }
90
+
91
+ gr[k][e] = tmp; // 追加
92
+
93
+ //-----
94
+
95
+ ```
96
+
97
+ 推測通り(ポインタ変数のせいで変数の更新が誤認されているのが問題)ならば
98
+
99
+ 一時変数を用いて変数の更新を正しく認識させられるかもしれません。