2025-11-20 06:36:35
C语言里float类型通常只能精确表示7位有效数字。比如1.2345678这个数用float存储就会变成1.234567,第八位开始就不准了。这是因为float内部用了24位存储指数和尾数,但实际有效数字要少一位。
这是因为float遵循IEEE754单精度标准,用8位指数和23位尾数(加上隐含的1位)来表示数值。尾数部分只能存7位有效数字,剩下的16位用来存储小数点位置。比如数值1.23456789用float存储时,实际存储的是1.234567×2^0,隐含的1让总共有23位有效位数,但实际可用的整数和小数部分加起来最多7位。当数值超过这个范围时,比如.12345678,浮点数就会丢失三位数字变成1234567.8123456×10^3。这种精度限制在科学计算或需要高精度的场景下就要用double类型,它有11位指数和52位尾数,能表示16位有效数字。
本题链接: