gpt4 book ai didi

c++ - 在程序中添加概率方程

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:03 24 4
gpt4 key购买 nike

我一直在研究这个程序,它应该根据以下公式计算概率:

𝑃(𝑥) = (𝑁!)/(𝑥!) * (𝑁−𝑥)!) * (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;
}

该程序识别我输入系统的值,但在计算答案时,它给出的数字非常小。我尝试了公式的每个部分以确保它们没有错误,但是当我独立测试时一切正常。有谁知道这个等式有什么问题吗?

谢谢!

最佳答案

首先你需要写一个阶乘函数,查看这个 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);

此外,我使用 double 是因为它们可以更准确,尤其是对于 p,因为它是 0 <= p <= 1。

关于c++ - 在程序中添加概率方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com