美文网首页
浅入单双精度

浅入单双精度

作者: 大继 | 来源:发表于2020-01-30 18:25 被阅读0次

前言

直至20世纪70年代末, 实数(十进制数)被不同的计算机厂商表示成不同的二进制形式, 这使得许多程序与不同的机器不兼容. 1980年IEEE委员会将实数的浮点数据表示进行了标准化. 该标准大部分由Intel基于8087数学协处理器定制的. 认识到不同的程序需要不同的精度, 因此建立了单精度和双精度. 而今几乎所有的软件和硬件公司都遵循这些标准, 因此有必要做一些了解.

精度数字类型的目的

用于科学计算法 例如 1.3E9 表示 1300000000人口
S = 1, E=9,M=1.3 转成二进制存入硬盘或内存,CPU运算也是有优势的。减少磁盘空间计算量什么的。

或那种-0.000000002 这种的计算2E-9
S=0,E-9, M=2

IEEE-754浮点标准
经典图

单双精度浮点数的IEEE标准格式
关键字:浮点数 IEEE标准

大多数高级语言按照IEEE-754标准来规定浮点数的存储格式。
IEEE-754规定 单精度浮点数用4字节存储,双精度浮点数用8字节存储,表示为三部分:符号位、阶和尾数。

S+E+M

S 符号位,尾数的符号位;
E 阶,即指数;
M 尾数,即有效小数位数;

单精度格式

符号位 1位, bit31
阶 8位,bit30~23
尾数 24位,bit22~0

双精度

符号位 1位,bit63
阶 11位,bit62~52
尾数 53位,bit51~0

省略位

二进制数的规格化表示中,小数点前的数(即二进制表示的最高位)为1,故省略之。
所以 float的M 用23位可以表示24位的值,double的M 用52位可以表示53位的值。

阶码

以移码的形式存储。对于float偏移量为127(7FH),对于double偏移量为1023(3FFH)。
存储浮点数的阶码之前,偏移量要先加到阶码上。原因如下:
float的值的二进制科学计数法表示中 阶的范围 ±127, 当一个数“无限”趋近于0,即为 浮点0.
为了保证 浮点0 与 机器0 的存储表示一样,阶在存储时加上偏移 127

eg
2^3,移码的结果 在单精度中为82H(130=3+127),在双精度中为402H(1026=3+1023)。

浮点数有两个例外
0.0存储为全零;
无限大数的阶码存储为全1,尾数部分全零,符号位指示正无穷或者负无穷。

有效位数

顾名思义,精度是指某精度范围。

float:2^23 = 8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位数: 28388608 = 16777216 。有8位有效数字,但绝对能保证的为7位,也即float的精度为7~8位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为16~17位。

参考

https://www.cnblogs.com/yichunguo/p/11817440.html

https://blog.csdn.net/u011277123/article/details/95774544

http://blog.chinaunix.net/uid-24118190-id-75212.html

https://www.jianshu.com/p/dd84e16cdc91

来实际操作一下

相关文章

  • 浅入单双精度

    前言 直至20世纪70年代末, 实数(十进制数)被不同的计算机厂商表示成不同的二进制形式, 这使得许多程序与不同的...

  • 6-MySQL的数据类型[mysql数据库]

    数据类型:数字 TINYINT: -128~~+127 UNSIGN FLOAT\DOUBLE 单双精度浮...

  • C语言学习 - 浮点型数据类型

    在 C语言中,浮点型数据类型可分为:float(单精度)、double(双精度)、long double(长双精度...

  • 浮点类型解析

    一、类型定义浮点类型有float、double、long double类型,即单精度、双精度、长双精度,一般情况下...

  • Intel x87 FPU的使用基础

    Intel x87 FPU专门用于执行标量浮点计算,可以对单精度浮点(32位)、双精度浮点(64位)以及扩展双精度...

  • JavaScript浮点数运算

    参考资料:https://www.html.cn/archives/7340 单精度&双精度 单精度1符号位、8指...

  • 实验题目

    冒泡排序 双精度加法 串拷贝

  • Python

    基本类型 1. Number类型 整数: int 浮点数: float(双精度) 其他语言: 单精度(float)...

  • Java 浮点数精度丢失问题的原因

    浮点数,分单精度(float)和双精度(double): float ,介于 -3.402823e38 和 +3....

  • 面试准备--项目介绍CUDA

    CUDA程序优化 CUDA程序优化应该考虑的点: 精度:只在关键步骤使用双精度,其他部分仍然使用单精度浮点以获得指...

网友评论

      本文标题:浅入单双精度

      本文链接:https://www.haomeiwen.com/subject/kcovthtx.html