再问除数为0的问题
我前一次发了个除数为0的帖子。pclvmm回复了。再次感谢这位大侠!
我验证了一下,程序如下:
#include "stdio.h"
#define PI 3.1415926
int main()
{
int i;
float n;
i=14;
n=0/PI/(i-14);
printf("%f\n",n);
getchar();
}
n=0/(i-14);这样就出错。
n=0/PI/(i-14);这样写n应该等于0啊?
怎么出现了奇怪的现象。见附件。请高手指教,谢谢!
[解决办法]
除0错误在整数除以整数零的时候必然出现,但在浮点运算中则不一定出现
因为浮点运算得到的零不一定是精确的零,可能是一个极小的小数,因此浮点运算时的除零可能会变成除以绝对值极小的小数,从而得到一个绝对值极大的大数
数学运算时,会将低表示范围的数先提升为高表示范围的数,再进行运算,因此当被除数为PI时,除数的i-14被提升为浮点数
[解决办法]
1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果用 0 除一个负整数也会得到 -1.#INF / -inf 值。
-1.#IND / nan:这个的情况更复杂,一般来说,它们来自于任何未定义结果(非法)的浮点数运算。"IND"是 indeterminate 的缩写,而"nan"是 not a number 的缩写。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞ 等。