【浮点值的上溢和下溢(其他数值类型相似)】上文说到,float的取值范围为10^-37~10^38。
如果数字大小超过10^38会怎么样呢?通过本文标题,我们大概可以猜出,这就是一个浮点值的上溢(emmmm……我仿佛是个沙雕)。当计算导致数字过大,超过当前类型的表达范围时,就会发生上溢。现在C语言规定,会给toobig赋一个值表示无穷大的特定值,而且printf()显示该值为inf或infinity(或具有无穷意义的其他内容)(喵喵喵???有木有大佬解释下啊,虽然看到我这篇的人可能少之又少了吧!)
当除以一个很小的数时,情况更复杂。float以指数和尾数部分来储存。若存在一个指数部分为最小值的数,这个数就是float能用的精度所能储存的最小值。现在把他在除以2,通常这个操作会减少指数部分,但现在已经是最小的指数了,所以计算机只能将尾数部分的位向右移,空出一个二进制位,并丢弃最后一个二进制数。(哦,狗屎,看不懂)。这样虽然得到了结果,却原本末尾有效位的数字。这种状况叫做下溢。当然,如果除以一个非常大的值就直接归0了。
还有一个特殊的浮点值NaN(not a number)。例如,给某个函数传递一个值,该函数将返回一个角度。该角度的正弦就是传入函数的值。但是正弦值不能大于1,所以传入的参数如果大于一,,该函数的行为是为定义的。在这种情况下,该函数将返回NaN值。
一般来说,如果你进行了不正确的操作,例如除以0,数组越界?会返回这个NAN。
推荐阅读
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- C/C++|C/C++ basis 02
- Qt实战|Qt+OpenCV联合开发(二十一)--图像翻转与旋转
- Qt实战|Qt+OpenCV联合开发(十四)--图像感兴趣区域(ROI)的提取
- Qt实战|Qt+OpenCV联合开发(十三)--通道分离与合并
- opencv|Qt+OpenCV联合开发(十六)--图像几何形状绘制
- Qt实战|Qt+OpenCV联合开发(十七)--随机数与随机颜色
- SNAT的MASQUERADE地址选择与端口选择
- IPTABLES的连接跟踪与NAT分析
- IPVS分析