奇思妙想 · 2024年 9月 17日 0

为什么123456788+1不等于123456789?

28 次浏览

尽管整数计算求和确实是等于,但如果把求和存放在32位float变量,却等于123456792. 原因在于float最多只能有7位有效数字,注意并不是7位有效小数点,是包含整数部分和小数部分总共有效位数是7!

  • int i = 123456788, j = 1;
    float f = i + j; // 不等于123456789

32位浮点数按照IEEE754标准规定,二进制格式最多是23位小数点,1 << 23 等于8388608,对应十进制最多有7位有效数字。