最近看扎瓦的时候看到了对浮点数的介绍,并且指明浮点数不能进行相等性运算,这个在接触c的时候就知道了,
但是一直不知道为什么。具体的原因不知道也不影响使用,但是不符合我想走的学院派风格,所以大概的看了看。
现在的浮点数在内存中的表示方法有IEEE规定。也不知道为什么是电子电气规定计算机的事。。。
不管是float还是double都是以这种形式存储的。
sign表示符号位,0正 1负应该不陌生,至于后面的exponent,fraction当时老师也没有说,现在我就掰一掰吧。
以一般的64位机为例
float占4个字节,32位。同理,double8个字节64位。
sign exponent fraction
float 1 8 23 32
double 1 11 53 64
这样在内存中存储的形式就很明了了,接下在接解释为什么这样存。
百度百科上是这么解释的:
*二进制浮点数是以符号数值表示法格式储存,将最高效位元指定为符号位元(sign bit);“指数部份”,
即剩下的f位元,为有效位数(significand)减掉有效位数本身的最高效位元。*
</