浮点数是什么,c语言浮点数表示规则

浮点数是什么,c语言浮点数表示规则 大家好,我是梁唐。今天是EasyC 专题第7篇,浮点数类型。访问github仓库:EasyLeetCode,欢迎star,欢迎pr~浮点数浮点数是C 的第二组基本类型,它能够表

大家好,我是梁唐。

今天是EasyC 专题第7篇,浮点数类型。

访问github仓库:EasyLeetCode,欢迎star,欢迎pr~

浮点数

浮点数是C 的第二组基本类型,它能够表示带小数部分的数字。不仅如此,浮点数的范围也比int更大,可以表示更大范围的数字。

我们都知道在计算机当中,所有数据本质上都是转化成二进制存储的。整数很简单,存储的就是转化成二进制之后的01串,那么浮点数又是如何存储的呢?

很容易猜到的是浮点数存储的结果也是二进制,但相比于整型直接转化成二进制要复杂一些。它需要先表示成下面这行式子:

EasyC  07,C  中的浮点型原理

这里的n即我们要存储的浮点数,s表示符号位,m是尾数,而e则是阶数。

符号位很好理解,它和整型当中的符号位一样,0表示正数,1表示负数。m表示尾数,

。我们这么看很抽象,来看一个例子,比如3.0,转化成二进制是(11.0),相当于

1.1 * 2^1。那么,s=1, m=1.1, e=1。

我们了解了浮点数的表示方式,那么它又是如何存储在计算机当中的呢?这需要我们进一步地剖析其中的细节。

关于m

首先是m,m被定义成一个大于等于1,小于2的小数。我们可以简单写成1.xx,其中xx表示的就是小数的部分。

既然它总是大于等于1,小于2的,那么它的个位一定是1,我们就可以将它省略,仅仅看之后小数的部分。小数的部分,我们同样使用二进制来逼近。比如0.625,可以表示成0.5 0.125,即2^-1 2^-3,表示成二进制就是101,只不过这里它的最高位是从-1开始的。

以32位的浮点数为例,除去1位表示符号,8位表示阶数之后,还有23位留给m。由于我们舍掉了小数点之前的1,所以我们的阶数是从-1开始的,理论上等价于24个二进制位。

关于e

在浮点数存储当中,e是一个无符号整数。以32位浮点数为例,e一共有8位,可以表示0-255。

但e是可以为负数的,根据IEEE 754的规定,e的真实值必须再减去一个中间数。对于8位的e,它的中间数是127。比如e的实际值是10,但是存储的时候需要存储成127 10=137。

除此之外,e还有另外三种情况:

  1. e不全为0,或全为1时,采用上述的规则表示
  2. e全为0时,e等于1-127,有效数字m不再默认加上1,这样是为了还原0.xxx的小数,以及接近于0的数
  3. e全为1时,如果有效数字m全为0,表示无穷大,如果m不全为0,表示nan(not a number)

关于e的规则看起来有些复杂,初看觉得有些难以理解,为什么要用减去中间值的设计,而不用符号位?后来仔细思考了一下才发现,如果引入符号位很难区分0.xxx以及e就是等于0的情况,虽然也可以特判处理,但就没有现在这样优雅了。

觉得上文看不懂的小伙伴可以直接略过这段,毕竟这个是浮点数的实现原理,算是很底层的内容了,C primer上对于这部分也没有过多阐述。

浮点数的使用

C 当中有两种浮点数的书写方式,第一种是使用常规的小数点表示法:

double a = 1.23;
float b = 3.43;

另外一种写法是科学记数法,写成:

double a = 2.45e8;
double b = 1e-7;

2.45e8表示2.45 * 10^8,e之后可以跟正数也可以跟负数,但数字当中不能有空格。

浮点数类型

和C语言一样,C 也有三种浮点数类型:float,double和long double。和整型一样,这三种类型都是浮点数,只不过表示的范围不同。

浮点数的范围有两个部分综合决定,一个部分是有效数字。比如14179是5位有效数字,而14000只有两位,因为后面三个0都是填充位,有效数字的位数不依赖小数点的位置。C 当中要求,float通常能表示7位有效数字,double通常能有16位,而long double至少和double一样。

另外,它们能够表达的指数范围至少是-37到37。一般来说,float一共是4个字节32位,而double是8个字节64位,当然这也取决于具体的运行环境。

注意事项

关于浮点数的使用有几点注意事项,千万要注意。

  1. cout输出浮点数会删除结尾的0
  2. 书写浮点数常量时默认为double类型,如果需要强制表示为float类型,请在结尾加上后缀f或者F,如:2.34f
  3. 由于浮点数有精度,不能直接判断两个浮点数是否相等,很有可能得不到预期结果,正确的做法是判断精度范围,如:
double epsilon = 1e-8;
// 判断a是否和b相等
if (abs(a - b)

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/85592.html

(0)

相关推荐

  • 热血江湖手游荣誉怎么获得,热血江湖手游商人

    热血江湖手游商誉怎么获取净利润连续突破,股价却破发下跌,从19元跌至仅5.75元,是为何?所谓有多大能力,赚多大的钱,不要妄想;而很多人炒股其实都是在靠自己的想象和感觉罢了,没有逻辑,没有系统,没有信息,有的只是一腔热血。 这是次新股特性。 如果。生于青春死于青春什么意思?不管是在开始的热情燃烧。还是中途的坚韧忍耐,和最后的挫折中成功。都要保持新鲜的青春热血的活力和精神。青春的我们,找回那些单纯、善良、正直、豁达,不要再。三国演义中刘备势力弱小,为什么仍然获得很多人的效忠和拥护呢?我是棠棣,一枚历史爱好者。欢迎大家【关注】我,一起谈古论今,纵论天下大势。君子一世,为学、交友而已! 东汉的统治,

    阅读 2022年7月5日
  • 谢明宇:孩子为什么怕鬼?两个故事来了解背后的真相

    接下来我讲两个故事,我们通过故事了解背后的真相,内容震撼,建议做好心理准备,尤其是为人父母。

    生活 2021年11月10日
  • 火影忍者高招s首付金币需要多少?,火影忍者高招S首付多少

    火影忍者高招s忍加首付要多少招? 在火影手游里面,每次高招新上架都有首付一说,也就是会出一个招募活动,每达到一定招募次数就能获得忍者碎片奖励,其中忍抽50抽获得10片,s忍100抽...

    阅读 2022年7月19日
  • 大富翁10修改器风灵月影,大富翁10修改器怎么用

    大富翁11修改器一修大师版是一款可以轻松调整同名游戏数据的修改器,可以大幅降低游戏难度,轻松体验游戏内容。 这是一款充满童年回忆的回合制战略游戏,玩家可以在这里自由选择游戏地图,参...

    阅读 2022年10月24日
  • 分期贷款app下载1.0(附下载2022)

    即分期贷款app下载1.0(附下载2022)详情即分期贷款是

    2022年9月16日
  • 梦幻手游买号去哪个区比较好,梦幻手游从哪里买号

    梦幻手游买号去哪个区梦幻西游手游买号买哪个区?买生日快乐毕竟是火区,要是鬼区的话根本没什么人玩。 买生日快乐毕竟是火区,要是鬼区的话根本没什么人玩。梦幻西游手游哪个区卖号好卖?iOS区,武神坛冠军或者双平台2020都好卖 iOS区,武神坛冠军或者双平台2020都好卖梦幻西游手游交易平台有哪些?梦幻西游手游交易平台比较靠谱的就是5173了,这个平台比较安全因为卖号都是三无号比较多,另外网易在筹建藏宝阁,不过你有耐心可以等以后藏宝阁购买 梦幻西游手。梦幻西游手游新区能交易吗?可以交易,但是我觉得骗子多 可以交易,但是我觉得骗子多梦幻手游哪个区的号最保值?生日快乐这个,这个是老区,人还多 生日快乐这

    阅读 2022年6月26日