c语言保留6位有效数字_浮点数转换问题与浮点数的有效位

本文探讨了C语言中浮点数的转换和有效位问题。单精度浮点数尾数部分的23位限制导致小数点后约7-8位有效,但第8位以后的表示不完全确定。举例说明了2^-23及以上位数在某些情况下可能无法精确表示,而编译器在显示时可能仅保留6位有效数字。精度丢失主要发生在内部计算和输出显示两个阶段,其中输出显示的精度受编译器影响。
摘要由CSDN通过智能技术生成

一、浮点数的转换:下面这篇博客,讲的很好:

单精度浮点数的存储-转自hb.g@163.com_foxdesert的专栏-CSDN博客​blog.csdn.net

二、浮点数的有效位:

因为单精度浮点数尾数部分是23位,所以从小数来看,可以表示的最小浮点数,不考虑(整数位)是:

(1 or 0)* 2^-23,那么前面一位是(1 or 0) * 2^-22,具体见下表:

1b21d67ecf8a3231ed08515d2a8f5607.png

可以看到在最高位只有23限制的情况下,2^-23和2^-22之间的数是不一定表示的出来的,是不一定,也是有可能表示出来的,比如:2^-22和2^-21之间的数有一个2^-22+2^-21是可以表示出来的,其他的并不是所有的都可表示出来,但是一般小数点后前7位都是可以表示出来的,即通过这些数相加来配凑,所以一般尾数是23位数的情况下,有效位是7-8位。个人觉得前7位一定可以表示出来,第8位开始有一部分可以表示,越到后面越难表示了:看下例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值