定义

浮点数就是小数点位置不固定的数,也就是说与定点数不一样,浮点数的小数点后的小数位数可以是任意的,根据IEEE754-1985(也叫IEEE Standard for Binary Floating-Point Arithmetic)的定义,浮点数的类型有两种:单精度类型(用4字节存储)和双精度类型(用8字节存储)。

存储方式

要理解浮点数的存储方式,首先要从科学技术法讲起。

对于十进制数345.67用科学计数法可以表示为3.4567 * 10^2,其中3.4567有很多英文叫法,有叫fraction part,或者叫characteristic,或者mantissa,但是大多数习惯叫significand。我们这里统一称这一部分为significand。345.67除了可以表示为3.4567 * 10^2,还可以表示为0.34567 * 10^3,0.034567 * 10^4,但是通常情况下,把sigificand介于[1, 10)的形式称为标准形式(nomalized form)。

对于二进制,也有类似的情形。比如二进制小数101.1101 = 1.011101 * 2^2 = 0.1011101 * 2^3 = 0.01011101 * 2^4,其中把significand介于[1, 2)之间的形式称为标准形式,1.011101 * 2^2就是101.1101科学计数法的标准形式。

有了上面的理解,那么我们就可以把任何二进制浮点数都化成如下标准形式:

(+/-).f * ^e

其中(+/-)表示正负号,f表示signifcand的小数部分,e表示指数。而二进制的浮点数(无论是单精度,还是双精度)在计算机内部的存储格式就是依据上述的标准形式,被划分成3部分:

一 单精度

对于单精度浮点数,s使用1bit存储,0表示正数,1表示负数,e使用8bit存储,值范围是[0, 255],由于单精度总共使用4字节32bit存储,那么f就使用剩余的23bit存储。不用存储二进制标准形式1.f中的"1"的原因是,在标准形式下,它总是1,所以尽管单精度只存储了1.f中的23bit,但实际上它可以表示的精度是24bit(23bit + 没有存储的"1")。

上述存储形式中,需要特殊主意的指数e。

首先,这里的指数e是有偏的(biased),就是说,e是在实际指数的基础上加了一个偏移量(bias)对于单精度浮点数来说,这个偏移量 = 127(即2^(e的存储位数 - 1) - 1)。换句话说,有单精度浮点数的存储形式反推单精度浮点数的二进制标准科学计数法的公式为:

(-)^s * .f * ^(e - )

其中s是符号位的值,当s = 0时,是一个正的单精度浮点数,当s = 1时,是一个负的单精度浮点数。

其次,对于e = 0和e = 255,有特殊的意义,总结如下:

1)e = 0 & f = 0

此时表示的单精度浮点数就是0,可以是正0,也可以是负0。负0的表明表示的实际上是一个非常小的负数,但是这个数已经无法用单精度的存储方式来表示了,比如1.11 * 2^(-129)已经无法用单精度表示了,因为即使-129加了127的偏移量,仍然落在了e的值区间[0, 255]之外。

2) e = 0 & f != 0

此时表示的数可有下面的工时推出:

(-)^s * .f * ^(-)

其中s仍然表示符号位,这种形式被称为非标准形式

3) e = 255 & f = 0

此时表示正无穷或者负无穷,依据符号位决定

4) e = 255 & f != 0

此时表示NaN

二 双精度

双精度和单精度的存储类似,只是在bit位数有有点不一样。s使用1bit存储,e使用11bit存储,因此bias是1023,f使用52bit存储,因此可以表示的精度是53bit。

由双精度浮点数存储形式反推的双精度浮点数标准二进制科学表示公式为:

(-)^s * .f * ^(e - )

对于指数e也有和单精度一样的情形。

浮点数(floating-point number)二进制存储格式的更多相关文章

  1. matlab里textread出现错误“Trouble reading floating point number from file (row 1, field 1)”

    matlab里textread出现错误“Trouble reading floating point number from file (row 1, field 1)” 解决办法:traindata ...

  2. 复合文档的二进制存储格式研究[ole存储结构](word,xls,ppt...)[转]

    复合文档文件格式研究   前 言 复合文档(Compound Document) 是一种不仅包含文本而且包括图形.电子表格数据.声音.视频图象以及其它信息的文档.可以把复合文档想象成一个所有者,它装着 ...

  3. 【zzuli-2266】number(二进制处理)

    题目描述 某人刚学习了数位DP,他在某天忽然思考如下问题: 给定n,问有多少数对<x, y>满足: x, y∈[1, n], x < y x, y中出现的[0, 9]的数码种类相同 ...

  4. 代码之髓读后感——名字&作用域&类型

    名字和作用域 为什么要取名 看着代码中遍地都是的变量,函数,或多或少的我们都应该想过,为什么会有这些名字呢? 我们知道,计算机将数据存储到对应的物理内存中去.我们的操作就是基于数据的.我们需要使用这些 ...

  5. 笨办法学Python - 习题3: Numbers and Math

    目录 习题 3: 数字和数学计算 算术运算符 加分习题: 我的答案: 总结: 扩展: Python比较运算符 Python赋值运算符 Python位运算符 Python逻辑运算符 Python成员运算 ...

  6. C语言中你可能不熟悉的头文件(stdlib.h)

    C语言中你可能不熟悉的头文件<cstdlib>(stdlib.h) C Standard General Utilities Library (header) C标准通用工具库(头文件) ...

  7. 笨办法学Python(三)

    习题 3: 数字和数学计算 每一种编程语言都包含处理数字和进行数学计算的方法.不必担心,程序员经常撒谎说他们是多么牛的数学天才,其实他们根本不是.如果他们真是数学天才,他们早就去从事数学相关的行业了, ...

  8. Java中浮点数的基础知识

    偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...

  9. 如何避开JavaScript浮点数计算精度问题(如0.1+0.2!==0.3)

    不知道大家在使用JS的过程中有没有发现某些浮点数运算的时候,得到的结果存在精度问题:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.60000000000 ...

随机推荐

  1. 单源最短路dijkstra算法&&优化史

    一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...

  2. Python基础知识--Slice(切片)和Comprehensions(生成式)

    最近在Youtube的Python视频教程上学习Python相关的基础知识,视频由Corey Schafer制作,讲得十分简单明了,英文发音也比较清晰,几乎都能听懂,是一个不错的Python入门学习的 ...

  3. 用原生JS写一个网页版的2048小游戏(兼容移动端)

    这个游戏JS部分全都是用原生JS代码写的,加有少量的CSS3动画,并简单的兼容了一下移动端. 先看一下在线的demo:https://yuan-yiming.github.io/2048-online ...

  4. day 13 内置函数

    内置函数思维导图:https://www.processon.com/view/link/5c13ad2de4b0ed122da75668 内置函数 作用域相关:   locals() 返回当前作用域 ...

  5. xshell5连接虚拟机的小问题处理

    1.首先确保虚拟机是桥接状态,然后在虚拟机下用ifconfig查看ip地址(当然是默认你虚拟机下是linux) 2.确保虚拟机安装了ssh...安装openssh-server: 对应的sudo ap ...

  6. Prism for WPF 搭建一个简单的模块化开发框架(二)

    原文:Prism for WPF 搭建一个简单的模块化开发框架(二) 今天又有时间了,再改改,加了一些控件全局的样式 样式代码 <ResourceDictionary xmlns="h ...

  7. 成都Uber优步司机奖励政策(3月23日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 重庆Uber优步司机奖励政策

    获得任何奖励的前提条件:当周接单率80%以上,当周乘客评分4.5分以上,且无刷单等欺诈行为. 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最 ...

  9. 4567: [Scoi2016]背单词

    4567: [Scoi2016]背单词 https://www.lydsy.com/JudgeOnline/problem.php?id=4567 题意: 题意看了好久,最后在其他人的博客里看懂了的. ...

  10. 3D Touch初探

    伴着6S的发布,iOS 9.0开始支持3D Touch功能.使用场景来分一共有三种情况. 一.基于UIViewController的扩展 1. 首先要注册需要监听重按手势的 source view: ...