精华内容
下载资源
问答
  • 不用COPYMEMORY函数 1、如何将双精度浮点数存储到数组中 2、转存后的数组,如何再得到这个浮点数。
  • 计算机程序中的浮点数分为单精度浮点数和双精度浮点数。单精度和双精度精确的范围不一样。计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。稍大一点的单位是字节(Byte,简写为B)。再大一级的是千...

    上节课 简单介绍了浮点数。计算机程序中的浮点数分为单精度浮点数和双精度浮点数。

    单精度和双精度精确的范围不一样。

    计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。

    稍大一点的单位是字节(Byte,简写为B)。

    再大一级的是千字节(kilo Bytes),用k来表示。

    再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。

    再大一级的单位为G。一部高清电影的大小通常为1~2G。

    再大一级的单位为T。

    换算关系为:

    1B = 8bit

    1k = 1024B = 2^10 B

    1M = 1024k = 2^20 B

    1G = 1024M = 2^30 B

    1T = 1024G = 2^40 B

    单精度(float)在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点)。

    双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。

    不管是float还是double,在计算机中的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位、指数位和尾数部分。其中float的符号位、指数位(即整数部分)、尾数部分分别为1, 8, 23。双精度则分别为1, 11, 52。

    float

    double

    精度主要取决于尾数部分的位数,float为23位,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点算做一位,即有效数字为7位。

    类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

    程序验证:

    #include

    int main()

    {

    float a = 1.123456789;

    printf("a = %20.9f\n", a);

    double b = 2.123456789;

    printf("b = %20.9f\n", b);

    return 0;

    }

    注意:这里%20.9f表示浮点数总共有20位,其中小数占9位。不足20位的部分,左侧用空格来填充。

    运行结果:

    a = 1.123456836

    b = 2.123456789

    从运行结果可以看出,单精度浮点数小数部分只有前6位是准确的,后三位是不准确的。双精度小数部分9位都是准确的。

    展开全文
  • ‌首先要把二进制表贴出来,以便下面转换的时候查看:111111111111098765432102^102^92^82^72^62^52^42^32^22^12^010245122561286432168421‌我们说一下「double float」双精度浮点数,基于 IEEE 754:‌双精度...
    一个十进制的数字,转换成二进制格式,动手计算下数字是怎样以二进制方式存储的。

    首先要把二进制表贴出来,以便下面转换的时候查看:

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    10

    9

    8

    7

    6

    5

    4

    3

    2

    1

    0

    2^10

    2^9

    2^8

    2^7

    2^6

    2^5

    2^4

    2^3

    2^2

    2^1

    2^0

    1024

    512

    256

    128

    64

    32

    16

    8

    4

    2

    1

    我们说一下「double float」双精度浮点数,基于 IEEE 754:

    双精度浮点数为 64 位,单精度为 32 位,双精度比单精度,肯定表示的更加精准嘛,就是数字的位数能表示的更多。双精度浮点数存储的格式由三部分构成:
    • 符号位(Sign):1位
    • 指数位(Exponent):11位
    • 精度位(Fraction):52位
    基本结构清楚了,来一一说明下。这 64 个位,只能输入0或1。符号位:为0 ,说明当前值是正数;符号位为1,说明当前值是负数;指数位:为了让指数位为正数,所以,指数位设置了一个基准值(也叫偏移量),这个基准值为 01111111111 一个 0 后面跟10个1(值为1023)。精度位:精度位有一个隐藏位的 1 ,就是计算完的二进制数据,第一个1是不需要显示出来的,默认存在。

    数字:300

    我们拿数字 300 举例:300/2 = 150 余 0;

    150/2 = 75 余 0;

    75/2 = 37 余 1;

    37/2 = 18 余 1;

    18/2 = 9 余 0;

    9/2 = 4 余 1;

    4/2 = 2 余 0;

    2/2 = 1 余 0;

    1/2 = 0 余 1;余数反推回去 100101100 补全以后就是 00100101100,这样的操作可以在「纸」上操作。如果在电脑上,可以使用 (300).toString(2)。最终数字 300 转换成二进制为 100101100,计算精度位的时候,第一个 1 去掉,对应的就是精度的存储值就是 00101100;计算指数位的时候需要先写成 1.00101100E8 ,小数点向前移动了 8 位,指数为 8 ;看最上面的对应表,指数为 8 的话,对应的为 00000001000,这个二进制数据需要加上「基准值」,最后结果为 1023 + 8 = 1031;而 1031 对应的二进制码为 10000000111,所以哈,指数位存的码点值为 10000000111。

    290e4fb00518580aac43a70c7ee94ef4.png

    数字 300 存储的码点

    数字:10.24

    另一个数字 10.24 举例:

    10/2 = 5 余 0;

    5/2 = 2 余 1;

    2/2 = 1 余 0;

    1/2 = 0 余 1;

    余数反推 1010,补全以后就是 00000001010;小数部分计算:

    .24 * 2 = .48 取 0;

    .48 * 2 = .96 取 0;

    .96 * 2 = 1.92 取 1;

    .92 * 2 = 1.84 取 1;

    .84 * 2 = 1.68 取 1;

    .68 * 2 = 1.36 取 1;

    .36 * 2 = .72   取 0;

    .72 * 2 = 1.44 取 1;

    .44 * 2 =  .88  取 0;

    ......小数部分在尾数的表示为 001111010....那这个 10.24 在二进制表示应该是 1010.001111010.... 这样的数值。精度位:010001111010(把上面的 1 去掉)指数位:先转成 1.010E3,然后指数为 3 就是 00000000011 + 01111111111 = 100000000010,也可以计算为 3 + 1023 = 1026

    281dc747227b814458a6bab9653a61a3.png

    数字 10.24 存储的码点

    在线转换页面:

    http://www.binaryconvert.com/result_double.html?decimal=053
    考文档:

    https://blog.csdn.net/abcdu1/article/details/75095781

    https://blog.csdn.net/zhengyanan815/article/details/78550073

    https://www.boatsky.com/blog/26


    图片授权基于 www.pixabay.com 相关协议

    推荐阅读

    如何用 vue-cli 调试源码?如何调试 Vue 源码?

    Vue 在挂载数据前都经历了什么?


    cf85b3815e0d05c7849189584a7e18bb.png

    展开全文
  • 单精度浮点数与双精度浮点数区别

    千次阅读 2020-04-06 15:14:35
    双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,阶码11位,尾数52位。 2、所存的数值范围不同 单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围...

    单精度浮点数与双精度浮点数区别

    1、所占的内存不同

    单精度浮点数占用4个字节(32位)存储空间来存储一个浮点数,包括符号位1位,阶码8位,尾数23位。

    而双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,阶码11位,尾数52位。

    2、所存的数值范围不同

    单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围大约是:-2.23E308 ~ 1.79E308。E表示10的多少次方,如3.4E38指的是3.4乘以10的38次方。

    3、十进制下的位数不同

    单精度浮点数最多有7位十进制有效数字,如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。

    双精度浮点数可以表示十进制的15或16位有效数字,超出的部分也会自动四舍五入。
    在这里插入图片描述

    整型:

    byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字节。Byte。末尾加B

    short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。Short。末尾加S

    有符号int:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字节。Integer。

    无符号int:0~2^32-1。

    long:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807。8字节。Long。末尾加L。(也可以不加L)

    展开全文
  • 计算机程序中的浮点数分为单精度浮点数和双精度浮点数。 单精度和双精度精确的范围不一样。 计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。 稍大一点的单位是字节(Byte,简写为B)。 再大一级的...
  • 一、复习10进制转2进制1)整数部分:除2取余,逆序2)小数部分:乘2取整,正序在线工具二、了解IEEE 754双精度浮点数规范1) 通过2进制的科学计数法存储。和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N...

    一、复习10进制转2进制

    1)整数部分:除2取余,逆序

    2)小数部分:乘2取整,正序

    在线工具

    二、了解IEEE 754双精度浮点数规范

    1) 通过2进制的科学计数法存储。

    和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N。其中需要留意下二进制科学计数法的整数部分都是1,所以在存储时省略整数部分1。

    2) 格式:符号位+指数位+尾数位

    符号位S:第 1 位是正负数符号位(sign),0代表正数,1代表负数

    指数位E:中间的 11 位存储指数(exponent),用来表示次方数

    科学计数法中指数E是可以为负数的,在表示负的指数时IEEE754标准引入了一个偏移量1023,在存储指数时加上该偏移量把负数E转成正数。这就导致11位的指数能够表示指数的范围是[-1023, 1024]。

    尾数位M:最后的 52 位是尾数(mantissa),超出的部分自动进一舍零,没有填满的部分自动补0

    如10进制数400.12,用10进制科学计数法表示为:4.0012*10^2,。其中"0012"就是尾数部分。

    最终可表示为(图片来源):

    c9b2e2b8c07b60922dfe2138fa586ff5.png

    其中S,E,M都是实际存储科学计数法的值。

    如10进制4.5转成2进制为:

    // Step1 转成二进制

    100.1

    // Step2 转成二进制科学计数

    1.001*2^2

    S = 0

    E = 2 + 1023 = 2015

    M = 001 // 整数1被省略了

    形象的查看存储情况,可参考这里

    3) 有限集合

    IEEE754能表示的实数数量是有限的,假设MAX_VALUE,MIN_VALUE分别表示其表示的最大正数和最小正数,那有限集合可表示为:

    [-MAX_VALUE, -MIN_VALUE] U [MIN_VALUE, -MAX_VALUE]

    几个有趣的问题

    1) 0.1 + 0.2 !== 0.3

    0.1,0.2和0.3在转成二进制时都是无限循环的,在存储时会失去精度,0.1+0.2在运算时也会失去精度,导致结果不等于0.3。

    2) 给一个数字加上一个非0的增量还等于本身这个数字

    1 + Number.MIN_VALUE/2 === 1

    这个增量如果小于JS能表示的最小浮点数就会视为0,加上这样的数等于加上0。

    3) JS最大整数为啥是2^53-1而不是2^52-1

    尾数占用52个bit,再加速省略的那个bit(见2.1)正好53个bit。

    4)JS可以精确的表示哪些小数呢

    小数部分是这种格式的都可以精确表示。

    1/Math.pow(2, N), 其中N是(0, 1024)区间的整数。

    如分数1/2,1/4, 1/8。

    参考

    展开全文
  • 单精度浮点数和双精度浮点数

    千次阅读 2011-03-10 11:06:00
    根据IEEE754国际标准,常用的浮点数有两种格式 (1) 单精度浮点数(Single)(2)双精度浮点数(double)单精度浮点数 用来表示带有小数部分的实数,一般用于科学计算。 占用4个字节(32位)存储空间,包括符号位1位,阶码...
  • 单精度浮点数与双精度浮点数

    千次阅读 2012-03-28 07:04:56
    (1) 单精度浮点数(Single)  用来表示带有小数部分的实数,一般用于科学计算。  占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为3.4E-38~3.4E+38,单精度浮点数最多有7位十进制...
  • 一、前言相比于整数,浮点数的...常用的浮点数有单精度浮点数(float)和双精度浮点数(double),本文主要以单精度浮点数为例,双精度浮点数原理相同。二、浮点数的表示方法通常使用IEEE754标准存储和表示浮点数。IEEE7...
  • 双精度浮点数double

    千次阅读 2019-03-09 12:28:24
    比起单精度浮点数,双精度浮点数(double)使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进位制的15或16位有效数字。 sign bit(符号): 用来表示正负号 exponent(指数): 用来表示次方数 mantissa(尾数): 用来...
  • 计算机程序中的浮点数分为单精度浮点数和双精度浮点数。 单精度和双精度精确的范围不一样。 计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。 稍大一点的单位是字节(Byte,简写为B)。 再大一...
  • 大端存储和小端存储的区别
  • 单精度和双精度浮点数数据类型   C、C++中使用到的单精度浮点数(float)类型和双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存...
  • 双精度浮点数(double)       Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省...
  • 比如,给定一个单 精度浮点数的二进制存储为: 0 10000001 1101 0000000000000000000; 那么对应的符号为:0,表示正数;阶码 E 为:129-127=2;尾数为 1.1101。所以对应的二 进制科学计数法为:1.1101*2^2,也就是 ...
  • 双精度double是用 8 个字节来存储的,这是他们最本质的区别。  2、由于存储位不同,8位,16位他们能表示的数值的范围就不同,也就是能准确表示的数的位数就不同。 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38 ...
  • JS中使用IEEE-754规定的双精度浮点数,所有的算法也都符合IEEE-754规定的双精度浮点数运算。 双精度浮点数是一种64位(64 bit)的二进制数字格式。包括3个组成部分: 符号位 1位 阶码(指数部分) 11位 尾数(有效数...
  • 8字节16进制转双精度浮点数 前言 一、JS处理32位整型位运算? 示例:在JS中无论是整数还是小数都是按照64位的浮点数形式存储,而整数运算会自动转化为32位有符号整数。 有符号整数使用 31 位表示整数的数值,用第...
  • 写在前面碰巧最近定义接口的时候碰到了浮点数精度的问题,稍微整理了浮点数的一些知识点:浮点数的底层表示浮点数精度损失问题浮点数的表示范围和精度小数的二进制表示浮点数的表示借鉴了科学计数法,比如在十进制...
  • 本文都是下面文章开头6个问题的解答:张雅宸:浮点数的二进制表示以及几个例子​zhuanlan.zhihu.com问题1int 当两个数字都是float类型时,相乘的结果却是58...0.58 * 1000.58的双精度表示是:0 01111111110 0010100...
  • 二、了解IEEE 754双精度浮点数规范 1) 通过2进制的科学计数法存储。 和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N。其中需要留意下二进制科学计数法的整数部分都是1,所以在存储时省略整数部分1。...
  • 现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准的在内存中存储的形式为:对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了...
  • 于是双精度d的存储方式就是 最大数:0 11111111110 11111111111111111111111111111111111111111111111111111111111111111111 In [27]: struct.unpack("!d",b'\x7f\xef\xff\xff\xff\xff\xff\xff') Out[27]: (1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 765
精华内容 306
关键字:

双精度浮点数存储