运行代码时出现 NaN 错误
NaN error appearing when I run my code
首先,这是一个课堂作业,所以我不胜感激,但只是在我想学习时提示。我必须计算我的代码中看到的最终数字,但我的计算有些不对劲。我的输出读 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;
}
NaN
几乎总是被 0 除以的错误,在这种情况下就是这样。
-
首先,自
1 < say
以来,int/int
的计算结果为 0:P_S[i] = 1/say;
-
接下来,
0 * x
计算结果为 0 in: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;
计算
P_S的循环不正确:
P_S[i] = 1/say;
由于 say 是一个 int,并且在您的示例中,say 的值是 3,使用整数除法,1/say 是 1/3,即 0(余数为 1)。 因此,P_S[] 的所有值均为零,这意味着 A[] 的所有值也将为零,这反过来意味着总和将为零。 因此,当您尝试计算 final[] 时,您将除以零,因此是 NaN。 也许你想要:
P_S[i] = 1.0/say;
通过使用 1.0,您强制进入浮点计算,因此您的结果将是 0.33333...您的代码中还有其他低效率,这是错误的直接原因。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- g++的分段错误(在NaN上使用to_string两次时)
- 调用某个回调函数两次会导致分段错误:Nan
- 插件中节点.js/Nan 回调C++不频繁的隔离错误
- 运行代码时出现 NaN 错误
- C++:在数学错误中创建实际错误而不是 NAN
- 查找NaN错误的原因