回答編集履歴
3
+1の誤りを修正しました。4 * Nがあるのでループを1開始に戻しました。
answer
CHANGED
@@ -3,13 +3,13 @@
|
|
3
3
|
```C
|
4
4
|
double CountPoints(int N) { /*格子点の数を計算し円周率を計算する関数*/
|
5
5
|
int x;
|
6
|
-
|
6
|
+
long long Cp = 0; /*格子点の数*/
|
7
7
|
double pi; /*円周率*/
|
8
|
-
for (x =
|
8
|
+
for (x = 1; x < N; x++) {
|
9
|
-
Cp += ((long)sqrt((double)N * N - (double)x * x)
|
9
|
+
Cp += ((long)sqrt((double)N * N - (double)x * x));
|
10
10
|
}
|
11
|
-
Cp = (4 * Cp + 4 * N); /*他の象限の扇形+軸の格子点+原点*/
|
11
|
+
Cp = ((long)4 * Cp + 4 * N + 1); /*他の象限の扇形+軸の格子点+原点*/
|
12
|
-
pi = (Cp / ((double)N * N)); /* 面積/半径の二乗 */
|
12
|
+
pi = ((double)Cp / ((double)N * N)); /* 面積/半径の二乗 */
|
13
13
|
return pi;
|
14
14
|
}
|
15
15
|
```
|
2
Cpを格子点の数になるよう修正しました。
answer
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
double Cp = 0; /*格子点の数*/
|
7
7
|
double pi; /*円周率*/
|
8
8
|
for (x = 0; x < N; x++) {
|
9
|
-
Cp += (sqrt((double)N * N - (double)x * x));
|
9
|
+
Cp += ((long)sqrt((double)N * N - (double)x * x) + 1); //x軸上の格子点分を+1
|
10
10
|
}
|
11
11
|
Cp = (4 * Cp + 4 * N); /*他の象限の扇形+軸の格子点+原点*/
|
12
12
|
pi = (Cp / ((double)N * N)); /* 面積/半径の二乗 */
|
1
doubleでの計算に変更しました。
answer
CHANGED
@@ -1,22 +1,15 @@
|
|
1
|
-
|
1
|
+
xとNは整数のままとして、その他をdoubleで計算するようにしました。
|
2
2
|
|
3
|
-
ループの初期値は0です。これで半径の高さが得られます。
|
4
3
|
```C
|
4
|
+
double CountPoints(int N) { /*格子点の数を計算し円周率を計算する関数*/
|
5
|
+
int x;
|
6
|
+
double Cp = 0; /*格子点の数*/
|
5
|
-
|
7
|
+
double pi; /*円周率*/
|
6
|
-
↓
|
7
|
-
|
8
|
+
for (x = 0; x < N; x++) {
|
9
|
+
Cp += (sqrt((double)N * N - (double)x * x));
|
10
|
+
}
|
11
|
+
Cp = (4 * Cp + 4 * N); /*他の象限の扇形+軸の格子点+原点*/
|
12
|
+
pi = (Cp / ((double)N * N)); /* 面積/半径の二乗 */
|
13
|
+
return pi;
|
14
|
+
}
|
8
|
-
```
|
15
|
+
```
|
9
|
-
|
10
|
-
ループの終了条件が「x < N」でこの判定は常に真でなので不要です。
|
11
|
-
```C
|
12
|
-
if(N * N - x * x >= 0){ /*円周で囲まれる部分の格子点を全てたす*/
|
13
|
-
```
|
14
|
-
|
15
|
-
原点となっている1を加算する理由がわからなかったのですが、原点という意味であれば0なので不要です。
|
16
|
-
```C
|
17
|
-
Cp = ((long) 4 * Cp + 4 * N + 1); /*他の象限の扇形+軸の格子点+原点*/
|
18
|
-
↓
|
19
|
-
Cp = ((long) 4 * Cp + 4 * N); /*他の象限の扇形+軸の格子点+原点*/
|
20
|
-
```
|
21
|
-
|
22
|
-
1000くらいの半径でそれらしい値になります。
|