-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHitorMiss.cpp
More file actions
101 lines (88 loc) · 1.83 KB
/
HitorMiss.cpp
File metadata and controls
101 lines (88 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
double rand_num()
{//产生随机数函数
double ran_double = rand() / (double)(RAND_MAX);
return ran_double;
}
double rand_a_b(double a, double b)
{//产生a,b之间的随机数
double rand_double = a + (b - a)*rand() / (RAND_MAX);
return rand_double;
}
double fun(double x, double y)
{//函数x*x+y*y的值
double temp;
temp = x*x + y*y;
return temp;
}
double fun1(double x)
{//求函数sqrt(1 - x*x)的值
double temp;
temp = sqrt(1 - x*x);
return temp;
}
double fun_sin(double x)
{
return sin(x);
}
double HitorMiss(double a, double b, double c, double d, double (*fun)(double))
{//四个参数,a,b;c,d;和函数指针fun
double x, y;
double M = 1e1;
int m = 0;
for (int i = 0; i < M; i++)
{
x = rand_a_b(a, b);
y = rand_a_b(c, d);
if (y <= fun(x))
m++;
}
return (m / (M + 0.0)*(b - a)*(d - c));
}
void main()
{
srand((unsigned)time(NULL));
//double M = 1e1; //循环次数
//cout << M<<endl;
//double x, y;
//for (int j = 0; j < 8; j++)
//{
// int m = 0;
// for (int i = 0; i < M; i++)
// {
// x = rand_num();
// y = rand_num();
// //y = x;
// if (y <= fun1(x))
// m++;
// }
// cout << "当n=" << M << "时,结果为:" << 4 * m / (M + 0.0) << endl;
// M *= 10;
//}
//cout << rand_a_b(2.5, 4.3);
for (int i = 0; i < 5; i++)
{
cout << "通过概率计算sin(x)在[0,1]上积分值:" << HitorMiss(0, 1.0, 0, 0.85, fun_sin) << endl;
}
system("pause");
}
//多次循环的值 //计算x=y时结果
//for (int j = 0; j < 10; j++)
//{
// int m = 0;
// for (int i = 0; i < M; i++)
// {
// x = rand() / double(RAND_MAX);//产生0-1之间随机数
// y = x; //将x赋值给y
// if (x*x + y*y <= 1)
// m++;
// }
// cout << "当n=" << M << "时,结果为:" << 4 * m / (M + 0.0) << endl;
// M *= 10;
//}
/*cout << m << endl;
double Pi = 4 * m /( M + 0.0);
cout << "PI:" << Pi << endl;*/