1)NAN - Not A Number。意思是不是一个数值。VS调试显示类似”1.#QNAN00000000000“。
产生原因:无意义的算术计算如负数开方。判断方法:包含float.h头文件,调用_isnan()。
2)IND - Indeterminate Number。意思是不确定数值。VS调试显示类似“1.#IND000000000000”。
是NAN的一种特殊情况。产生原因:0除0,或无限大除无限大。判断方法通NAN
3)INF - Infinity。意思是无限大。VS调试显示类似“1.#INF000000000000”。
产生原因:如1/0.0的计算结果。判断方法:_finite()。
4)DEN - Denormalized。意思是非规格化数值。VS调试显示类似“4.940656458421e-324#DEN”。
无限接近0的值,无法用有限的位数保存的科学计数值。
dDenTest = 0.01E-305;
dDenTest /= 10; // This will produce a denormalized number.
dDenTest *= 10; // This will result in the previous normalized.
dDenTest /= 10; // This will produce a denormalized number.
dDenTest *= 10; // This will result in the previous normalized.
判断方法:
if ( dDEN != 0 && fabs ( dDEN ) <= std::numeric_limits<double>::denorm_min())
{
// it's denormalized
bDEN = true;
}
{
// it's denormalized
bDEN = true;
}
这些值的意义在其他平台上也是一致的,不过表达方式在不同的平台不同。
osg使用过程中,某个顶点数值为INF,导致场景范围计算错误,相机设置不正确而看不到对象。