「常识」浮点数和定点数

2023-10-30 00:28
文章标签 浮点数 常识 定点数

本文主要是介绍「常识」浮点数和定点数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

浮点数和定点数

本篇文章旨在简短的介绍浮点数、定点数的定义,以及一些常见的数制、补码。

一、常识

如果缺少以下常识的话,将很难理解浮点数和定点数的概念。

1、数

  1. 自然数
  2. 整数/分数
  3. 小数:有限小数、无限循环小数、无限不循环小数
  4. 实数:一个完备的数域。
  5. 复数
  6. 向量

2、计算机中数

1和0。

3、数制

2进制:逢2进1

8进制:逢8进1

10进制:逢10进1

16进制:逢16进1

————————————————分割线——————————————————

二、定点数和浮点数

在现实世界,我们需要计算y=sin(x)、y=cos(x)的函数值,x属于R,结果将是-1~1的无限稠密的连续值。

考虑计算机,x和y只能用有限的1和0来表示(有没有感受到人类的局限性,哪怕是用10300个字节来存储,也是有限的,用全世界的硬盘来存储也是有限的)。

现在人类将做出让步:比如只用10位小数位数作为有效值,之后的小数位数就省略了。

1、定点数

一句话:区间等分。

1⃣️考虑自然数:4bit,表示0~15,一共16个数。这也被称为自然编码。无须多言,自然的意思就是自然就懂了。

2⃣️考虑小数:比如用4bit,可以表示0~15,一共16个整数。如果用来表示0~1,那么把0~1等分成16等份,4’b0000表示0,4’b0001表示1/16=0.0625,4’b1111表示15/16=0.9375。想要精度更高,就付出更多bit位数的代价。

比如8bit,8’b0000_0001 = 1/256 = 0.00390625 ≈千分之4

现在你已经学会了用二进制数表示有限位的小数了。

3⃣️现在考虑负数:补码(不需要从公式角度理解)。

补码就是走针的手表。12过了就是1。

举例:3bit,自然编码,最大就是111,表示7,现在用111表示-1,越过了111,就是000,表示0。其余的正常加减就行了。一句话:用自然编码的最大值和最小值来表示正负之间的鸿沟

3bit的补码,范围为-4到3。(在这个数域中:3+1=-4)

-4-3-2-10123
100101110111000001010011

现在你已经学会了用二进制数表示负数了。

4⃣️考虑负的小数:用补码表示小数。

比如3bit的补码,范围为-2到正2:

-4-3-2-10123
100101110111000001010011
-2-1.5-1-0.50.00.51.01.5

(不知道读者读到这里有没有意识到一个问题:我们讨论的1和0和实数中的1和0是不是同一个东西?搜索关键词:伽罗华域。计算机中的1和0只是一个代号,其物理存在是高电平和低电平。如果不嫌麻烦完全可以记为阳和阴,那么这里-2的补码就是“阳阴阴”。)

2、浮点数

1⃣️考虑一个定点数:32bit能够表示的范围:0~42_9496_7295。一共有42.9亿多种状态,假设每个数,都带有10个bit的小数位数,并用补码表示:那么范围是:[-221,221-1]。221-1=209_7151。也就是说,计算范围是正负209万,两千乘以两千都会越界。(2000*2000=400万)

有没有感受到定点数的局限性?

现在我们来考虑牺牲一点东西,然后换来不越界的好处。

牺牲什么好呢?

自然是最不受重视的小数了。但又不能一个小数位数都不要。

那应该怎么办呢?

原则:大数的小数位数少一些,小数的小数位数多一些。这个原则显然是很合理的,想想你月初拿到生活费的时候,再想想你月底生活费快用光的时候。

2⃣️浮点数

考虑一个大数:1314520 = 1.314520*106

考虑一个小数:0.1314520 = 1.314520*10-6

这里两个数差了12个数量级。

但是二者却很相似。科学记数法:±1.(小数部分)*10n

因此我们不用记录1,只需要记录正负号小数部分指数

现在我们把这个科学记数法里面的小数部分称为尾数部分,换个名字,便于区分。

来看看IEEE的规定:(图片截图于:通俗易懂理解——浮点与定点的计算机表示及互转)
请添加图片描述

那么你能计算出单精度浮点数的范围吗?

指数部分8位,考虑正负指数:-128到127次方。

范围就是[10-128,10127]。

这种表示规则的好处就是,将范围拓展的很大,并且每个数都只有23位尾数。这意味着,一个大于1023的数,将会一个小数位数都没有。

带来的坏处:一个大数+一个小数,小数结果将被无情丢弃,这可能会导致计算出错。

这篇关于「常识」浮点数和定点数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/304399

相关文章

单精度浮点数按存储格式转为整数的程序

///#include<cstdio>//-----------------union int_char{unsigned char ch[4];float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右

从计组中从重温C中浮点数表示及C程序翻译过程

目录 移码​编辑  传统浮点表示格式 浮点数的存储(ieee 754)->修炼内功 例子:   ​编辑 浮点数取的过程   C程序翻译过程 移码  传统浮点表示格式 浮点数的存储(ieee 754)->修炼内功 根据国际标准IEEE(电⽓和电⼦⼯程协会)  32位 例子:    64位    IEEE754对有效数字M和

看病要排队这个是地球人都知道的常识

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝唯有付出,才有丰富的果实收获! 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来

IEEE的浮点数表示

IEEE浮点标准用V=(-1)^s*M*2^E 由符号,尾数,阶码表示 32位单精度 单精度 二进制小数,使用32位存储。 1 8 23 位长 +-+--------+-----------------------+ |s| exp | fraction | +-+--------+-----------------------+ 31 30 23 22 0 位

手机玩机常识-----小米系列机型 Android 15 更新计划 那些机型将会更新安卓15

小米机型是很多米粉最喜欢把玩的,其中解锁bl root 刷写twrp以及刷第三方系统资源相对其他品牌机型来说比较丰富。目前安卓15快要更新到很多机型。我们来了解下小米系列机型的更新计划是咋样的 小米会定期更新有关 Redmi红米 设备的支持日期的数据,包括可用的 Android 版本。稳定版以及开发版系统。 目前官方已经公布了哪些红米手机将获得Andro

反常识!科研巨头扎堆夕阳行业?A股研发之王是它?

这是邢不行第 119 期量化小讲堂的分享 作者 | 邢不行 2023年华为研发费用再创新高,高达1600亿。 多年高研发投入让华为在一众领域遥遥领先。 研发费用占全年收入23% 遍观全球,各行各业巨头也极为重视研发。 2022年全球研发投入排名 细数它们的成功史,大抵都离不开投入研发、收入增加,继而加大研发力度,收入狂飙这一路径。 高研发投入能否作为判断公司好坏的依据?

C语言浮点数运算,讲述原理并总结一些案例

有些C语言书上说float型的有效位数是6~7位,为什么不是6位或者7位?而是一个变化的6~7位?         浮点数在内存中是如何存放的?         float浮点数要比同为4字节的int定点数表示的范围大的多,那么是否可以使用浮点数替代定点数?         为什么float型浮点数9.87654321 > 9.87654322不成立?为何10.2 - 9的结果不

浮点数精度不再是困扰:Python高手的精准编程秘籍!解决Python浮点数精度问题!

本专栏主要是自己在实际使用Python和工作中遇到的一些问题以及解决方法,还有一些是在网上搜集到的一些频繁出现和比较复杂的疑难杂症,目的就是希望帮助到使用Python的小伙伴们,无论是刚入门的新手,还是已经精通的Python高手,希望大家一起加油 🧑‍💻博客主页:长风清留扬-CSDN博客📚系列专栏:Python疑难杂症百科-BUG编年史🤝每天更新大数据相关方面的技术,分享

【网络原理】从0开始学习计算机网络常识,中学生看了都能学会

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!! 引言 在当今数字化高速发展的时代,网络如同空气般无处不在,它已经深度融入我们的生活、学习和工作之中。 从日常的社交娱乐到

两个浮点数相等比较

你想问的是这个: 浮点数判断需要注意,float 和double 的精度范围,超过范围的数字会被忽略 (1)  浮点数大小判断 如果没有等号关系在里面,也就必然一大一小,那么直接用  > 或者 < (2) 浮点数相等判断 因为 浮点数在内存中存放,可能无法精确的储存,所以同一个值,可能有不同的内存数据,所以要使用以下的方法: 以float 为例,32位APP中精度为 6-7,所以取