首先这是一个课程作业,所以我会很感激帮助,但只是提示,因为我想学习。我必须计算我的代码中看到的最终数字,但我的计算结果不合适。我的输出读取nan,我认为不是数字。我一直试图弄清楚我哪里出错无济于事,有关如何纠正这个问题的任何建议?提前谢谢。
#include <iostream>
#include <cstdlib>
#include<stdio.h>
#include<cmath>
using namespace std;
int main(){
int say;
float iten_paket[100],daxil_olan_paket[100];
float P_B[100]; // Itmis paketlerin ehtimali = P(B)
float P_S[100]; // Her bir serverin secilme ehtimali = P(Si)
float sum=0,final[100],A[100];
cout<<"Please enter server number => ";
cin>>say;
for(int k = 1; k<=say; k++){
cout<<"Please enter the taken packet number for : "<<k<<" server ";
cin>>daxil_olan_paket[k];
cout<<"Please enter the lost packet number for : "<<k<<" server ";
cin>>iten_paket[k];
}
// Her serverin secilmey ehtimali tapilir, P(S 1,2,3.....n)
for(int i = 1; i<=say; i++){
P_S[i] = 1/say;
}
for(int c = 1; c<=say; c++){
P_B[c] = iten_paket[c]/daxil_olan_paket[c];
}
for(int d = 1; d<=say; d++){
A[d] = P_S[d]*P_B[d];
}
for(int f = 1; f<=say; f++){
sum=sum+A[f];
}
// Bayes dusturu P(Sn|B) = P(B|Sn)*P(Sn)/P(B)
for(int a = 1; a<=say; a++){
final[a] =(float) A[a]/sum;
cout<<"For server "<<a<<" probability is :"<<final[a]<<endl;
}
return 0;
}
答案 0 :(得分:0)
NaN
几乎总是0分频错误,在这种情况下就是这样。
首先,int/int
从1 < say
开始评估为0:
P_S[i] = 1/say;
接下来,0 * x
评估为0:
A[d] = P_S[d] * P_B[d];
然后,0 + 0
评估为0:
sum = sum + A[f];
最后,x/0
评估为NaN
:
final[a] = (float) A[a]/sum;
这是一个常见的初学者错误。只需在开始时float/int
进入:
P_S[i] = 1.0/say;
答案 1 :(得分:0)
计算P_S的循环不正确:
P_S[i] = 1/say;
因为say是一个int,并且在你的例子中,say的值是3,使用整数除法,1 / say是1/3,它是0(余数为1)。因此P_S []的所有值都为零,这意味着A []的所有值也将为零,这反过来意味着sum将为零。所以当你试图计算final []时,你除以零,因此NaN。也许你想要:
P_S[i] = 1.0/say;
通过使用1.0,您强制进行浮点计算,因此结果将为0.33333 ... 您的代码中还存在其他低效率,这是导致错误的直接原因。