精华内容
下载资源
问答
  • 计算机程序中的浮点数分为单精度浮点数和双精度浮点数。单精度和双精度精确的范围不一样。计算机里的最基本的存储单位用位(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

    展开全文
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...

    前言

    作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。

    浮点型

    首先明确java中浮点型数据类型主要有:单精度float、双精度double

    至于浮点型就是跟int ,string类型差不多。都是数据类型。

    浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而恰恰小数点可以在相应的二进制的不同位置浮动,可能是这样就被定义成浮点型了。不得不佩服这文化程度,定义个数据名称都这么有深度

    浮点型常量 Java的实常数有两种表示形式:

    1、 十进制数形式:由数字和小数点组成,且必须有小数点,如0.123 , 123.0

    2、科学计数法形式:如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数(当然也包括负整数)。

    科学计数法中的E

    了解浮点型常量 Java的实常数有两种表示形式之后,很有必要给各位科普科普下科学计数法中E的面貌了~

    E是指数的意思,E代表的英文是exponent,E表示10的多少次方的意思。

    比如7.823E5 = 782300 这里E5表示10的5次方,再比如54.3E-2 = 0.543这里E-2表示10的-2次方

    再补充一点(针对负次方理解)

    一个数的负几次方就是这个数的几次方的倒数。

    比如: 2的负1次方=2的1次方分之一=1/2

    比如: 3的负2次方=3的2次方分之一=1/9

    单精度浮点数(float)

    单精度浮点数在机内占4个字节、有效数字8位、表示范围:-3.40E+38 ~ +3.40E+38

    在Java语言当中,所有的浮点型字面值 【V8提示】浮点型简单来说就是表示带有小数的数据 默认当做double类型来处理,要想该字面值当做float类型来处理,需要在字面值后面添加F/f,或者强制装换为float。具体如下代码:

    public static void main(String[] args) {

    //3.10是浮点型,浮点型字面值默认当做double类型来处理,直接编译通过;

    double d=3.10;

    //3.10是浮点型,则必须加 F或者f,若没加,直接编译不通过,会报错“损失精度”

    float f=3.10; //编译出错会报错“损失精度”

    // 解决办法:

    // 第一种方式:强制类型转换

    float f1=(float)5.1;

    // 第二种方式:没有类型转换;

    folat f2=5.1f;

    }

    再来看看下面的测试,结果肯定十之八九会在意料之外,哈哈~

    public static void main(String[] args) {

    float a = 12345678.90123456789f;

    double b=0.12345678901234567890;

    float c=0.12345678901234567890f;

    System.out.println(a);

    System.out.println(b);

    System.out.println(c);

    打印结果

    a = 1.2345679E7

    b = 0.12345678901234568

    c = 0.12345679

    }

    双精度浮点数(double)

    双精度浮点数在机内占8个字节、有效数字16位、表示范围:-1.79E+308 ~ +1.79E+308

    double的精度太低,不适合用于做财务软件,财务涉及到钱的问题,要求精度较高,所以在java中有一个基础的类库名为:java.math.BigDecimal,但这个BigDecimal类型是引用类型不是基础类型,切记!!!

    在讲单精度浮点数(float)的时候,差不多顺道把double之间的区别讲了哈哈,所以最后给张很经典的图片“敷衍敷衍”下,哈哈哈 哎哎哎..别打...别打...别打脸QAQ

    ea4ee312a600fda2b710a1c2ee56260f.png

    想深入了解浮点数在计算机中存储方式可以参考这篇文章

    浮点数在计算机中存储方式

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

    千次阅读 2020-04-06 15:14:35
    单精度浮点数与双精度浮点数区别 1、所占的内存不同 单精度浮点数占用4个字节(32位)存储空间来存储一个浮点数,包括符号位1位,阶码8位,尾数23位。 而双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数...

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

    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)。 再大一级的...
  • 本文实例讲述了Python双精度浮点数运算并分行显示操作。分享给大家供大家参考,具体如下:#coding=utf8def doubleType():'''''Python中的浮点数是双精度浮点数,可以用十进制或科学计数法表示。实际精度依赖于机器...
  • 本代码将双精度浮点数转换为单精度浮点数,适合浮点数为正值的转换。 使用后将占用VD2810~VD2970字节,欢迎交流。 本代码的完成经历了一段时间的刻苦研究,无偿提供给真正需要的人,希望同行少走弯路。 代码允许复制...
  • 单精度浮点数,双精度浮点数,浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。
  • 一、复习10进制转2进制1)整数部分:除2取余,逆序2)小数部分:乘2取整,正序在线工具二、了解IEEE 754双精度浮点数规范1) 通过2进制的科学计数法存储。和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 单精度浮点数(float)与双精度浮点数(double)的区别 单精度浮点数(float)与双精度浮点数(double)的区别如下: (1)在内存中占有的字节数不同 •单精度浮点数在机内占4个字节 •双精度浮点数在机内占8个字节 ...
  • 单精度浮点数和双精度浮点数Here you will learn about difference between float and double i.e. float vs double. 在这里,您将了解float和double的区别,即float vs double。 These are two commonly used ...
  • 双精度浮点数在机内占8个字节 (2)有效数字位数不同 单精度浮点数有效数字8位 双精度浮点数有效数字16位 (3)所能表示数的范围不同 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38 双精度浮点的表示范围:-1.79E+...
  • (1)在内存中占有的字节数不同单精度浮点数在机内占4个字节双精度浮点数在机内占8个字节(2)有效数字位数不同单精度浮点数有效数字8位双精度浮点数有效数字16位(3)所能表示数的范围不同单精度浮点的表示范围:-...
  • 双精度浮点数转换

    热门讨论 2013-08-19 17:24:54
    双精度浮点数、单精度浮点数与十六进制,二进制之间可以进行任意转换
  • 单精度双精度浮点数转换

    热门讨论 2013-05-02 12:36:32
    单精度双精度浮点数转换,浮点数与16进制转换工具
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。 浮点型 浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而恰恰小数点可以在相应的二进制的不同位置浮动,可能是...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • IEEE754字节转单精度/双精度浮点数
  • 单精度浮点数和双精度浮点数

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

    2015-12-12 12:43:00
    双精度浮点数   双精度浮点数格式 是一种 计 算机数据格式,在 计 算机存 储 器中占用 8 个字 节 ( 64 bits ),利用“浮点”(浮 动 小数点)的方法,可以表示一个范 围 很大的数 值 。   在 ...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 双精度浮点数double

    千次阅读 2019-03-09 12:28:24
    双精度浮点数(double)是计算机使用的一种数据类型。比起单精度浮点数,双精度浮点数(double)使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进位制的15或16位有效数字。 sign bit(符号): 用来表示正负号 ...
  • 一、前言相比于整数,浮点数的...常用的浮点数有单精度浮点数(float)和双精度浮点数(double),本文主要以单精度浮点数为例,双精度浮点数原理相同。二、浮点数的表示方法通常使用IEEE754标准存储和表示浮点数。IEEE7...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,425
精华内容 1,370
关键字:

双精度浮点数