我一直致力于这个程序,它应根据以下公式计算概率:
()=(!)/(!)*( - )!)*(p ^ x)*((1-p)^(N-x))
此外,当用户输入一个值时,N必须是一个整数,x必须是一个介于0和N之间的整数,而p必须是介于0和1之间的正实数。到目前为止这个部分是有效的很好,但我不知道如何在程序中正确添加概率公式。
以下是我目前的代码:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
long int factorial (int N, int x, int p);
int main ()
{
double N, x, p;
cout << "Input N value" << endl;
cin >> N;
cout << "Input x Value" << endl;
cin >> x;
while(x<=0 || x>=N){
cout << "x value is NOT between 0 and N." << endl;
cout << "Input x Value" << endl;
cin >> x;
}
cout << "Input p value" << endl;
cin >> p;
while(p<=0 || p>=1){
cout << "p value is NOT a real number between 0 and 1." << endl;
cout << "Input p value" << endl;
cin >> p;
}
return 0;
}
任何人都可以帮助我了解如何在我的程序中正确添加等式吗?
谢谢!
这是我的新代码:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double factorial (double N, double x, double p);
int main ()
{
double N;
double x;
double p;
cout << "Input N value" << endl;
cin >> N;
cout << "Input x Value" << endl;
cin >> x;
while(x<=0 || x>=N){
cout << "x value is NOT between 0 and N." << endl;
cout << "Input x Value" << endl;
cin >> x;
}
cout << "Input p value" << endl;
cin >> p;
while(p<=0 || p>=1){
cout << "p value is NOT a real number between 0 and 1." << endl;
cout << "Input p value" << endl;
cin >> p;
}
double Probability;
Probability = factorial(N, x, p);
cout << "Probability= " << Probability << endl;
return 0;
}
double factorial (double N, double x, double p){
double answer = ((tgamma(N+1))/((tgamma(x+1)) * (tgamma((N-x)+1)))) * (pow(p,x)) * (pow((1-p),(N-x)));
return answer;
}
程序会识别我在系统中输入的值,但是当它计算出答案时,它会给出一个非常小的数字。我尝试了公式的每个部分,以确保它们不是一个错误,但当我独立测试时一切正常。有谁知道这个等式有什么问题?
谢谢!
答案 0 :(得分:1)
首先你需要编写一个阶乘函数,看看这个stackoverflow链接: How do you implement the factorial function in C++?
然后只需编写一个函数进行计算。假设你的阶乘函数被称为getFact(int n),那么:
double solve(int N, int x, double p) {
double answer = ( getFact(N)/getFact(x) )*getFact((N-x))* pow(p,x)* pow((1-p),(N-x));
return answer;
}
然后在设置值后调用main中的solve函数。
double P_x;
P_x = solve(N,x,p);
另外,我使用双精度因为它们可以更准确,特别是对于p,因为它是0 <= p <= 1。