为什么我的程序不近似Pi
why does my program not approximate pi?
我正在尝试编写一个程序,该程序通过使用两个随机数为6/pi^2的概率来近似Pi,因此我应该能够将PI置于SQRT(6/概率(,但由于某种原因,它不倾向于PI,而是趋向于3.912。我尝试了rand((函数,并且尝试了Mersenne Twister随机数生成器,但它们都给了我类似的结果。这是怎么回事?这是我的C
中的代码#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
srand(time(0));
int times;
cout << "enter number of times: ";
cin >> times;
for(int i = 0; i <= times; i ++)
{
double pi_approx, probability;
int num1, num2, number_of_coprime;
num1 = rand();
num2 = rand();
if(__gcd(num1, num2)>1)
{
number_of_coprime++;
}
probability = double(number_of_coprime)/double(i);
pi_approx = sqrt(6/probability);
cout <<100*i/times<< "% number of coprimes: "<< number_of_coprime << " pi approximation: " << pi_approx<<endl;
}
return 0;
}
您需要在适当的范围内声明变量,正确的公式是概率为6/pi^2,因为次数次数为无穷大。尝试以下代码:
int main()
{
srand(time(0));
//for (int times = 100; times < 1000; ++times)
int times = 1000000;
{
double pi_approx, probability;
int number_of_coprime = 0;
for (int i = 0; i < times; i++)
{
int num1, num2;
num1 = rand() % times;
num2 = rand() % times;
if (__gcd(num1, num2) == 1) // increment if coprime !!
{
number_of_coprime++;
}
}
probability = double(number_of_coprime) / double(times);
pi_approx = sqrt(6 / probability);
cout << pi_approx << endl;
}
return 0;
}
输出是:
3.14179
您在计数错误的东西:当它们为coprime时,应增加计数器(gcd == 1(,但是当GCD为>1。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- clang整洁10忽略了我的NOLINT命令
- 为什么我的程序不近似Pi