什么是1.#INF为什么以及为什么要投掷 float或double防止因崩溃而被分割?
还有,如何防止0分裂的任何好主意?(像任何宏或模板一样)?
int nQuota = 0;
int nZero = 3 / nQuota; //crash
cout << nZero << endl;
float fZero = 2 / nQuota; //crash
cout << fZero << endl;
Run Code Online (Sandbox Code Playgroud)
如果我改用:
int nZero = 3 / (float)nQuota;
cout << nZero << endl;
//Output = -2147483648
float fZero = 2 / (float)nQuota;
cout << fZero << endl;
//Output = 1.#INF
Run Code Online (Sandbox Code Playgroud)
fre*_*low 13
1.#INF是正无穷大.当你将正浮点数除以零时,你会得到它(如果你将浮点数零本身除以零,那么结果将是"不是数字").
另一方面,如果将整数除以零,程序将崩溃.
float fZero = 2 / nQuota;崩溃的原因是因为运算/符的两个操作数都是整数,所以除法是对整数执行的.然后将结果存储在浮点数中并不重要; C++没有目标类型的概念.
为什么正整数转换为整数是最小的整数,我不知道.
| 归档时间: |
|
| 查看次数: |
5169 次 |
| 最近记录: |