PRNGを使用して円周率を推定するときに常に2.8284が得られるのはなぜですか?

rapsoulCecil

私はC ++を初めて使用します。コンピューターシステムの乱数ジェネレーターを使用して、アーネストチェザロの定理に基づいて円周率の値を統計的に決定しようとしています。しかし、私が今やったことは、シード番号を入力し、100個の疑似乱数を生成してから、円周率の値を推定することができます。ジェネレータは、さまざまな疑似乱数のグループを生成できます。ただし、混乱は、変更なしで2.8284の円周率の推定値を常に取得することです。コードは次のとおりです。

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   int seed;
   cout << "input a seed number: " << endl;
   cin >> seed;
   srand(seed);
   int i, a[100];
   for (i = 0; i < 100; i++)
      a[i] = rand() % 100 + 1;
      cout << "The generated random numbers are: " << endl;
   for (i = 0; i < 100; i++)
      cout << a[i] << "\t";
   int m, n, j, r;
   int  sum = 0;
   for (j = 0; j < 100; j++)
   {
      m = a[j];
      n = a[j + 1];
      j = j + 2;
      do
      {
          r = m%n;
          m = n;
          n = r;
      } while (r != 0);
        if (n = 1)
        sum = sum + 1;
   }
   double Pi, p;
   p = 300 / sum;
   Pi = sqrt(p);
   cout << "The estimate value of Pi is: " << Pi << endl;
   system("pause");
return 0;
}

Cesaroの定理は、2つのランダムな整数xとyが与えられた場合、gcd(x、y)= 1の確率は6 /(Pi ^ 2)であると述べていることに注意してください。また、使用されるPRNGは、結果の推定値がPi(3.1416)にどれだけ近いかに影響します。

ロドリゴ

コードにはいくつかの問題があります。

問題#1:

if (n = 1)

それはそうでなければif (n == 1)、あなたが割り当て1ていてn、常に真であると評価しているはずです。

問題#2:

      n = r;
  } while (r != 0);
  if (n == 1)

あなたが考えてみれば、ループが場合にのみ終了しますrです0が、その後nもなります0ので、ループの最後の行の。したがって、nに等しくなることはありません1あなたはおそらく欲しいですif (m == 1)

問題#3:

for (j = 0; j < 100; j++)
{
    ...
    j = j + 2;

あなたは増加しているj中でforのラインとループ本体に。必要なのは1つだけです。

for (j = 0; j < 100; j += 2)
{
    //no j increment

問題#4:

p = 300 / sum;

両方の数値が整数であるため、これは整数の除算です。フォーティングポイントが必要です:p = 300.0 / sum;

それらの変更で私は約を得てい3.16ます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

疑似乱数を使用して円周率の値を推定すると、2.44前後の値が得られます。私は何が間違っているのですか?

分類Dev

マチンの公式を使用して円周率の値を計算すると、間違った値が得られるのはなぜですか?

分類Dev

円周率を計算しようとすると常に0になります

分類Dev

$(を印刷すると数列が得られるのはなぜですか

分類Dev

knn()のprobから「奇妙な」比率が得られるのはなぜですか?

分類Dev

influxdb v.013を使用しているときに、合計とカウントで予期しない結果が得られるのはなぜですか

分類Dev

iloc()を使用するとSettingWithCopyWarningが得られるのに、もう1つは得られないのはなぜですか?

分類Dev

vscodeで異なる回答が得られたのはなぜですか?

分類Dev

JavaScriptのRegExpでこの結果が得られるのはなぜですか?

分類Dev

Promise.resolve(v)を待つことでvが得られるのに、待たないことで約束が得られるのはなぜですか?

分類Dev

SEまたはNSEdplyr関数を使用して異なる結果が得られるのはなぜですか

分類Dev

なぜ期待とは逆の結果が得られるのですか?

分類Dev

関数を逆にすると元の番号が得られないのはなぜですか?

分類Dev

出力が得られないのはなぜですか?

分類Dev

OVER(PARTITION BY yearValue)を使用すると、異なるSUM値が得られるのはなぜですか?

分類Dev

filter()を使用すると必要なものが得られるのに、get()を使用するとエラーが発生するのはなぜですか

分類Dev

なぜこの出力が得られるのですか?

分類Dev

なぜこの出力が得られるのですか

分類Dev

なぜ空の結果が得られるのですか?

分類Dev

なぜこの出力が得られるのですか?Java

分類Dev

sbrk(0)を2回呼び出すと、異なる値が得られるのはなぜですか?

分類Dev

SASで1つの観測のみが得られるまで、doを使用するのはなぜですか?

分類Dev

Linq Selectなぜ結果が得られるのですか?

分類Dev

なぜ間違った出力が得られるのですか?

分類Dev

辞書を使用してNumPy配列の値を置き換えると、あいまいな結果が得られますが、それはなぜですか?

分類Dev

UnixToDateTimeを呼び出すと、何千年も先に結果が得られるのはなぜですか?

分類Dev

この例で(f arg)を呼び出してfの本体を呼び出すと、明示的に異なる結果が得られるのはなぜですか?

分類Dev

ファイルをスキャンして単語を探すときにゼロの出力が得られるのはなぜですか?

分類Dev

用語の順序を並べ替えると、異なる回答が得られるのはなぜですか

Related 関連記事

  1. 1

    疑似乱数を使用して円周率の値を推定すると、2.44前後の値が得られます。私は何が間違っているのですか?

  2. 2

    マチンの公式を使用して円周率の値を計算すると、間違った値が得られるのはなぜですか?

  3. 3

    円周率を計算しようとすると常に0になります

  4. 4

    $(を印刷すると数列が得られるのはなぜですか

  5. 5

    knn()のprobから「奇妙な」比率が得られるのはなぜですか?

  6. 6

    influxdb v.013を使用しているときに、合計とカウントで予期しない結果が得られるのはなぜですか

  7. 7

    iloc()を使用するとSettingWithCopyWarningが得られるのに、もう1つは得られないのはなぜですか?

  8. 8

    vscodeで異なる回答が得られたのはなぜですか?

  9. 9

    JavaScriptのRegExpでこの結果が得られるのはなぜですか?

  10. 10

    Promise.resolve(v)を待つことでvが得られるのに、待たないことで約束が得られるのはなぜですか?

  11. 11

    SEまたはNSEdplyr関数を使用して異なる結果が得られるのはなぜですか

  12. 12

    なぜ期待とは逆の結果が得られるのですか?

  13. 13

    関数を逆にすると元の番号が得られないのはなぜですか?

  14. 14

    出力が得られないのはなぜですか?

  15. 15

    OVER(PARTITION BY yearValue)を使用すると、異なるSUM値が得られるのはなぜですか?

  16. 16

    filter()を使用すると必要なものが得られるのに、get()を使用するとエラーが発生するのはなぜですか

  17. 17

    なぜこの出力が得られるのですか?

  18. 18

    なぜこの出力が得られるのですか

  19. 19

    なぜ空の結果が得られるのですか?

  20. 20

    なぜこの出力が得られるのですか?Java

  21. 21

    sbrk(0)を2回呼び出すと、異なる値が得られるのはなぜですか?

  22. 22

    SASで1つの観測のみが得られるまで、doを使用するのはなぜですか?

  23. 23

    Linq Selectなぜ結果が得られるのですか?

  24. 24

    なぜ間違った出力が得られるのですか?

  25. 25

    辞書を使用してNumPy配列の値を置き換えると、あいまいな結果が得られますが、それはなぜですか?

  26. 26

    UnixToDateTimeを呼び出すと、何千年も先に結果が得られるのはなぜですか?

  27. 27

    この例で(f arg)を呼び出してfの本体を呼び出すと、明示的に異なる結果が得られるのはなぜですか?

  28. 28

    ファイルをスキャンして単語を探すときにゼロの出力が得られるのはなぜですか?

  29. 29

    用語の順序を並べ替えると、異なる回答が得られるのはなぜですか

ホットタグ

アーカイブ