c语言 float 精度,C语言float的精度为什么是6~7位

C语言浮点数标准

计算机中浮点数采用的是IEEE 754标准。浮点数分为单精度浮点数(32位)和双精度浮点数(64位)。浮点数的基本格式如下:

fb717a6dd22c6e8082aceaef64e5474e.pngsign:符号位,0表示正,1表示负

exponent:阶码,浮点数的幂次。一般采用移码表示。

fraction:浮点数的小数部分

C语言float,double数据结构

9842e36eaa3eedaf5a4cb577f430ad97.png

以float为例

二进制小数十进制小数

2^-230.00000011920928955078125

2^-220.0000002384185791015625

2^-210.000000476837158203125

2^-200.00000095367431640625

2^-190.0000019073486328125

2^-180.000003814697265625

float的精度由尾数决定。2^23=8 388 608 有7位。是不是说明精度应该是7位?实际上float的二进制向十进制转换过程中不是一一对应的。是离散的。float最小的数是0.00000011920928955078125。

#include

int main(){

float f1=1.0000011f;

float f2=1.0000022f;

float f3=1.0000033f;

float f4=1.0000044f;

float f5=1.0000055f;

float f6=1.0000066f;

float f7=1.0000077f;

float f8=1.0000088f;

float f9=1.0000099f;

printf("%.7f %.25f\n",f1,f1);

printf("%.7f %.25f\n",f2,f2);

printf("%.7f %.25f\n",f3,f3);

printf("%.7f %.25f\n",f4,f4);

printf("%.7f %.25f\n",f5,f5);

printf("%.7f %.25f\n",f6,f6);

printf("%.7f %.25f\n",f7,f7);

printf("%.7f %.25f\n",f8,f8);

printf("%.7f %.25f\n",f9,f9);

return 0;

}

输出>>

1.0000011 1.0000010728836060000000000

1.0000021 1.0000021457672119000000000

1.0000033 1.0000033378601074000000000

1.0000044 1.0000044107437134000000000

1.0000055 1.0000054836273193000000000

1.0000066 1.0000065565109253000000000

1.0000077 1.0000077486038208000000000

1.0000088 1.0000088214874268000000000

1.0000099 1.0000098943710327000000000

输出结果中可以得出: 小数点后第6位是准确的,但是到了第7位,某些数字发生的四舍五入。

1.0000066 1.0000065565109253000000000   1.0000099 1.0000098943710327000000000 都发生了四舍五入。所以说第7位有可能精确,也有可能不精确。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值