前言
在C语言的浮点数:float,double中存在一类特别的数:-1.#IND。我们有时会看到它。比如:
float tmp =sqrt(-1);
此时tmp的值就是-1.#IND
IND其实就是Implementation Not define的意思,也就是说这个是未定义或者他不是一个数。
那么-1.#IND00是如何在内存中存储的呢?根据IEEE 745规定:
类别 | 正负号 | 实际指数 | 有偏移指数 | 指数域 | 尾数域 | 数值 |
---|---|---|---|---|---|---|
NaN | * | 128 | 255 | 1111 1111 | non zero | NaN |
这类数的指数位为全1,尾数域不为0.
性质
若:a=-1.#IND00
a与任何浮点数(包括自身)的比较结果都为假,即 (a==a) 是 false的
应用
可以使用if(a!=a)为真来判断a是否为虚数。
例如:float a=sqrt(-1);
那么:(a!=a)为true
a==a为false