精华内容
下载资源
问答
  • 对于十进制的整数使用二进制表示很简单,但是对于十进制小数如何使用二进制进行存储?十进制的小数又何如使用二进制小数表示?此文章描述了如何将十进制小数转换为二进制小数以及浮点数再内存中时如何进行存储。 二...

    前言

    对于十进制的整数使用二进制表示很简单,但是对于十进制小数如何使用二进制进行存储?十进制的小数又何如使用二进制小数表示?此文章描述了如何将十进制小数转换为二进制小数以及浮点数再内存中时如何进行存储。

    二进制小数

    在计算机中,无论什么数据,最终存储都为二进制,对于整数部分很容易表示,但是对于非整数则比较困难。例如,十进制数0.125可表示为二进制0.001,怎么得来的?简单的计算可以用0.125不断乘2,结果小于1将二进制位记为0,结果大于1时将二进制位记为1

    0.125 * 2 = 0.25  二进制位记作 0
    0.25  * 2 = 0.5   二进制位记作 0
    0.5   * 2 = 1     二进制位记作 1
    

    所以得出结果为0.001

    另外可以把可以把十进制数0.125看做1/2/2/2 = 1*2^-3,十进制1换算为二进制还为1,二进制的负指数则相当于二进制数1右移位,用2的指数记为2^-3

    上面的例子因为能够用2的指数表示,所以能够被二进制精确的表达,但是有些情况,则无法使用二进制准确表达,例如一个人尽皆知的例子:十进制数0.1如何使用二进制表达?你会发现你无法用2的指数去表达它,即使用我们上面的计算方法:

    0.1   * 2 = 0.2  二进制位记作 0
    0.2   * 2 = 0.4  二进制位记作 0
    0.4   * 2 = 0.8  二进制位记作 0
    0.8   * 2 = 1.6  二进制位记作 1 
    0.6   * 2 = 1.2  二进制位记作 1
    0.2   * 2 = 0.4  二进制位记作 0
    0.4   * 2 = 0.8  二进制位记作 0
    0.8   * 2 = 1.6  二进制位记作 1
    ...
    

    你会发现,它会无穷无尽的循环0.0001100110011...,这便是为何无法使用二进制数精确表达十进制小数。类似于使用十进制数也无法精确表达,永远是0.33333333...

    浮点数

    浮点数是相对于定点数而言的。
    十进制数1234用科学计数法可写作:1.234*10^3,类似的,可用二进制表示为‭0.10011010010*2^11‬,我们称10011010010为尾数(mantissa/fraction),2称为基数(Radix),11则称之为指数(Exponent)。如此,小数点的位置根据指数的不同而浮动,称为浮点数。

    那么在内存中,是如何使用二进制表示小数?IEEE_754对此进行了标准化。

    单精度浮点数(Float)

    单精度浮点数的存储使用32位二进制数,最高位31是符号位,用来表示正负数,23-30存储指数,低位0-22存储尾数。
    需要注意的是,指数位的存储有两种方式:

    • 一种为有符号整数,意为有1位用来存储是正指数还是负指数。
    • 另外一种情况存储为无符号整数,使用指数偏移量来计算是正指数还是负指数,例如,单进度浮点数的指数偏移量为127,意味着所存储的指数需要减去127,得出的结果便是正确的指数。

    另外关于尾数的存储,在正规数(normal numbers)的情况下,二进制小数的表示总是以1.x开头,例如二进制数1001会表示为1.001*2^3而不是0.1001*2^40.01001*2^5。这在存储时则可省略开头的1,上面的1001则可存储为001且指数为3

    我们看一个具体的例子:十进制数0.15625

    符号(Sign):0
    指数(Exponent):偏移量计算方法,实际上我们应当存储的是-3指数,
                    用偏移量则为 127 - 3 = 124 转换为二进制为 0111 1100‬
    尾数(Fraction):按照上面的十进制小数计算二进制小数得出0.00101 = 1.01 * 2^-3,
                    去除前导1和指数得出尾数 = 01
    

    双精度浮点数(Double)

    双精度浮点数的计算类似于单精度浮点数,只不过存储大了一倍,它使用64位二进制数进行存储,与单精度浮点数相似,最高位63是符号位,用来表示正负数,52-62存储指数,低位0-51存储尾数,它的指数偏移为1023

    其它值

    无论是单精度还是双精度浮点数,都存在一些特殊的值,例如次正规数(subnormal numbers)和0以及±无穷大的数,还有无法正确转换的值NaN

    结尾

    精度越高的存储所需要的存储空间是越大的,当尾数过大无法存储时,根据IEEE_754标准进行丢失精度的舍入。

    Reference

    展开全文
  • 计算机程序中的浮点数分为单精度浮点数和双精度浮点数。单精度和双精度精确的范围不一样。计算机里的最基本的存储单位用位(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。

    72585e13087e5cbebed59264e797c26c.png

    float

    e275fab3ae554e3896079cdb57144fa6.png

    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位都是准确的。

    展开全文
  • 计算机程序中的浮点数分为单精度浮点数和双精度浮点数。单精度和双精度精确的范围不一样。计算机里的最基本的存储单位用位(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。

    format,png

    float

    format,png

    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位都是准确的。

    展开全文
  • 1809: 输入一个双精度浮点数,保留12位小数输出 #include<stdio.h> int main() { double a; scanf("%lf", &a); printf("%.12lf\n", a); return 0; }

    1809:
    输入一个双精度浮点数,保留12位小数输出
    #include<stdio.h>
    int main()
    {
    double a;

    scanf("%lf", &a);
    printf("%.12lf\n", a);
    
    return 0;
    

    }

    展开全文
  • 文档介绍:浮点数在计算机中的存储十进制浮点数格式:浮点数格式使用科学计数法表示实数。科学计数法把数字表示为系数(coefficient)(也称为尾数(mantissa)),和指数(exponent)两部分。比如 3.684*10^2. 在十进制中,...
  • 关于IEEE 754标准下的浮点数 (全文以64位为例,规定64位中包括1位符号位,11位阶码和52位尾数) 1.符号位 没什么可说的,一位,分正负罢了。 2.阶码 阶码由于偏移量的存在,其值会被加上1023(在IEEE754中特殊规定...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 背景:做到一题四则运算,除数不为零的题目 发现当除数为0.00000000000000001时,测试点输出为...解决:用fabs()函数取双精度浮点数double的绝对值,头文件是math.h 区别:整数类型取绝对值用的是abs()。 ...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 浮点数在计算机中的存储十进制浮点数格式:浮点数格式使用科学计数法表示实数。科学计数法把数字表示为系数(coefficient)(也称为尾数(mantissa)),和指数 (exponent)两部分。比如 3.684*10^2. 在十进制中,指数的...
  • 输入一个字符,一个数字,一个单精度浮点数,一个双精度浮点数,按顺序输出它们四个 且数字指定占4个字符宽靠右对齐,单精度浮点数保留2位小数,双精度保留12位小数,占一行输出、空格分隔 #include<stdio.h> ...
  • (posted on may 31,2011)(Firstly justified on jun 6,2011)十进制数常用科学计数法表示,如11=1.1*10^1, 111=1.11*10*2. 同样地,二进制数也有科学计数法表示,如64, 1000000=1.000000*2^6; 127, 1111111=1.111111*...
  • 输出----printf()函数 printf(“合适控制字符串”,输出... //&符号:表示取地址 //把读进来的数存放到变量a的地址表示的空间 //软件实验室(a)的地址是519(&a) scanf("%d",&a); printf("%d",a); return 0; }
  • 一、复习10进制转2进制1)整数部分:除2取余,逆序2)小数部分:乘2取整,正序在线工具二、了解IEEE 754双精度浮点数规范1) 通过2进制的科学计数法存储。和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N...
  • 输入一个双精度浮点数,输出这个浮点数的%f结果、保留5位小数的结果、%e、%g格式的结果 #include<stdio.h> int main() { double a; scanf("%lf", &a); printf("%lf\n", a); printf("%.5lf\n", a); printf...
  • java浮点数整数运算

    2021-05-31 15:01:56
    int a = 1; int b = 2; float f = (a + b)/2; System.out.println(f); //结果是1.0 上面这段代码的第三行先计算了a+b/2,因为a和b都是int型,int型除法会自动向下取整,所以答案是3//2 = 1。...上面这段代码的第三行先...
  • 浮点数详解
  • 0引言C程序设计的教科书中一般都不涉及浮点数的运算,浮点数的运算涉及到计算机的复杂的硬件结构和理解起来有一定难度的表示方法[1]。然而浮点数的运算在计算机软件系统中可以说是无处不在的。大多数编程语言都将浮点...
  • 分别进行100万次双精度与单精度浮点数加运算,计算各消耗多少时间,打印输出累加结果。 测试代码 void fpSpeedTest(void) { int begin_tick, end_tick; double dp1 = 1.0; double dp2 = 1.0; double dp = 0.0; ...
  • 小数点分为整数部分和小数部分,它们之间用点分隔. 例如,0.0、75.0、4.023、0.27,-937.198 -0.27等都是合法的小数. 这是最常见的小数形式. 这称为十进制形式.此外,十进制数也可以采用指数形式,例如7.25×102、0....
  • 有一篇我们是获取float如何转化为字节的过程,这次我们测试double C#关于32位浮点数Float(Real)一步步按位Bit进行解析
  • 阶码是整数,阶符和阶码的位数m合起来反映浮点数表示范围及小数点的实际位置;尾数是小数,其位数n反映了浮点数精度;尾数的符号Sf代表浮点数的正负。” “一旦浮点数的位数确定后,合理分配阶码和尾数的位数...
  • C语言浮点数整数转换的分析

    千次阅读 2021-05-22 12:42:04
    在C语言中,使用float和double类型数据分别对应单精度和双精度的浮点格式。以float为例,由于float是32位,int在32位机器上也是32位。因此,float必然不能对所有的int进行准确的表示。实际上,在数轴上,浮点数所能...
  • 单精度浮点数: 1位符号位 8位阶码位 23位尾数双精度浮点数: 1位符号位11位阶码位 52位尾数实数在内存中以规范化的浮点数存放,包括数符、阶码、尾数。数的精度取决于尾数的位数。比如32位机上float型为23位 double...
  • 在matlab中有这么两个函数hex2num(str),将16进制字符串str(默认双精度)转换成一个数(如果加一个类型转换可以转换为单精度hex2num(single(str))num2hex(num),将一个双精度的数num(默认)装换成16进制字符串(当然也...
  • python怎么输出浮点数

    千次阅读 2021-01-28 20:38:54
    float类型存放双精度浮点数,具体取值范围依赖于构建python的c编译器,由于精度受限,进行相等性比较不可靠。如果需要高精度,可使用decimal模块的decimal.Decimal数,这种类型可以准确的表示循环小数,但是处理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,842
精华内容 22,336
关键字:

双精度浮点数表示整数