【C】为什么7.0会被存储为6.99999

在《C Primer Plus》第 6 版 3.3.3 节 浮点数的介绍中,作者说浮点数通常只是实际值的近似值,例如,7.0可能被储存为浮点值6.99999。

如果采用32位的IEEE 754浮点表示形式来存储7.0,那么它的二进制表示将如下:

  • 符号位(1位):0(表示正数)
  • 指数部分(8位):10000001(以偏移方式存储,通常为中立值127加上实际的指数值)
  • 尾数部分(23位):110 0000 0000 0000 0000 0000(以二进制表示7.0的小数部分)

这是一个精确表示,为什么说可能会被储存为6.99999呢?

被储存为6.99999的意思应该是它们在计算机中的二进制表示是一样的。

从十进制值上看,7.0和6.99999是不会相等的,但是0.99999无法使用精确的二进制表示,而浮点数在计算机中的表示又是有精度的,也就是有有效位数,它不可能表示出一个无限循环的数。所以在一定精度内,7.0和6.99999的二进制表示是可能相等的。

所以说,浮点数只是实际值的近似值,在一定误差内的两个浮点数可以认为是相等的。

你可能感兴趣的:(C,语言,c语言)