精华内容
下载资源
问答
  • 单精度双精度浮点数转换

    热门讨论 2013-05-02 12:36:32
    单精度双精度浮点数转换,浮点数与16进制转换工具
  • 含义:表明单精度双精度精确的范围不一样,单精度,也即float,一般在计算机中存储占用4字节,也32位,有效位数为7位;双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。原因:不管float还是double ...

    浮点数7位有效数字.

    双精度数16位有效数字.

    含义:表明单精度和双精度精确的范围不一样,单精度,也即float,一般在计算机中存储占用4字节,也32位,有效位数为7位;双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。

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

    精度主要取决于尾数部分的位数,float为23位,除去全部为0的情况以外,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位。 类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

    6d0bf3b377f2d3addd23db65fcda1d19.png

    792c95e779d42e2291cad490d5c2c098.png

    有效数字:一般地,一个近似数,四舍五入到哪一位,就说这个数精确到哪一位,这时,从左边第一个不是0的数字起,到精确的数位止,所有的数字,都叫做这个数的有效数字.

    对没有小数位且以若干个零结尾的数值,从非零数字最左一位向右数得到的位数;对其他十进位的数,从非零数字最左一位向右数而得到的位数就是有效位数.

    例如:3.3 有二个有效数字

    3.33 有三个有效数字

    讨论:近似数0.038有几个有效数字,0.03080呢?

    分别有二和四位有效数字

    案例:2703.625(10进制)转换为IEEE 754的32位单精度浮点格式

    整数部分:

    采用除基取余法,基数为16,

    2703/16,商168,余15,即F

    168/16,商10,余8

    10/16,商0,余10,即A

    从上到下依次是个位、十位、百位,

    所以,最终结果为(A8F)16。

    (2703)10=(A8F)16=(1010 1000 1111)2

    小数部分

    0.625×2=1.25,取1

    0.25×2=0.5,取0

    0.5×2=1,取1

    (0.625)10=(0.101)2

    (2703.625)10

    =(2703)10+(0.625)10

    =(1010 1000 1111)2+(0.101)2

    =(1010 1000 1111.101)2

    单精度浮点数保存的字节格式如下:

    地址:+0 +1 +2 +3

    内容:SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

    根据IEEE浮点数的定义,将上述二进制数规格化:

    (2703.625)10

    >(101010001111.101)2

    >+1.01010001111101 * (2^11)

    符号S为正,等于0 B;

    指数EEEEEEEE为11+127=138,等于10001010 B;

    尾数为01010001111101000000000 B;

    合成后为

    0 10001010 010 1000 1111 1010 0000 0000

    若将上述值表示为十六进制数,则为(45 28 FA 00)16。

    展开全文
  • 该工具为单精度双精度的浮点转换成十进制,或者十进制转换为单精度双精度的工具,可以验证你的计算方法是否错误。
  •      C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit。单精度类型和双精度类型在计算机存储格式如下所示: 图1 浮点类型的...

    浮点数如何存储

         C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit。单精度类型和双精度类型在计算机存储格式如下所示:
    在这里插入图片描述

    图1 浮点类型的数据的存储格式

         要想理解float和double的取值范围和计算精度,必须先了解小数是如何在计算机中存储的:

          举个例子:78.375,是一个正小数。要在计算中存储这个数,需要把它表示为浮点数的格式,先进行二进制转换(ps:二进制的小数点和十进制的小数点是不同的。二进制小数点后是2的负幂,十进制是10的负幂):

    一、小数的二进制转换(浮点数)

         78.375的整数部分:
    (78)10=(1001110)2

         78.375的小数部分:
    (0.375)10 = 3/8 = 1/4+1/8 = 2-1+2-3 = (0.01)2+(0.001)2 = (0.011)2

    所以,78.375的二进制形式就是1001110.011
    然后,使用二进制科学计数法,则有
    (78.375)10 = (1001110.011)2 = 1.001110011 ×26
    注意,转换后用二进制科学计数法表示的这个数,有底数、有指数、有小数,称为浮点数。

    二、浮点数在计算机中的存储

         在计算机中,保存这个数使用的是浮点数表示法,分为三大部分,如图2所示:

         第一部分用了存储符号位(sign),用来区分正负数,这里是0,表示正数;

         第二部分用来存储指数(exponent),这里的指数是十进制的6;

         第三部分用来存储小数(fraction),这里的小数部分是001110011;
    注意:指数也有正负之分。
    在这里插入图片描述

    图2 浮点数在计算机中的存储格式

    1.单精度表示法

          Float类型的32位单精度表示如下:

         符号位(sign)占用1位,用来表示正负数,

         指数位(exponent)占用8位,用来表示指数,

         小数位(fraction)占用23位,用来表示小数,不足位数补。

    在这里插入图片描述

    2.双精度表示法

         Float类型的64位单精度表示如下:

         符号位(sign)占用1位,用来表示正负数,

         指数位(exponent)占用11位,用来表示指数,

         小数位(fraction)占用52位,用来表示小数,不足位数补。
    在这里插入图片描述

         总结:指数位决定了大小范围,因为指数位数越大,则表示的数越大;而小数位决定了计算精度,因为小数位能表示的数越大,则能计算的精度越大。

    三、指数位的偏移量与无符号表示

         需要注意的是指数可能是正数如78.375,也可能是负数,如0.0375,即指数是有符号整数,而有符号整数的计算要比无符号整数计算麻烦,所以为了减少不必要的麻烦,在实际存储指数时,需要把指数转为无符号整数。转换过程如下:

         注意到float的指数部分是8位,则指数的取值范围是-126到+127,为了消除负数带来的实际计算上的影响(比如比较大小、加减法等),可以在实际存储时候,给指数做一个简单的映射,加上一个偏移量,比如float的指数偏移量位127,这样就不会有负数出现了。

         • 比如指数如果是6,则实际存储的是6+127 = 133,即把133转换为二进制后再存储;

         • 指数如果是-3,则实际存储的是-3+127 = 124,即把124转换为二进制再存储;

         • 当我们需要计算实际代表的十进制数的时候,再把指数减去偏移量即可。

         • 对于double类型,存储的时候指数偏移量是1023。

    最后

         所以用float类型来保存十进制小数78.375,需要先得到符号位、指数位和小数部分。这个例子前面已经分析过,所以:

         符号位为0;

         指数位为6+127=133,二进制表示为10 000 101;

         小数部分是001110011,不足部分自动补0;

         连起来用float表示,加粗部分是指数位,最左边是符号位0,代表正数:

    0 10000101 001110011 00000 00000 0000

         如果用double来存储,符号位和最后0的个数有变化,需要注意。
    在这里插入图片描述

    展开全文
  • 所以我目前正在开发一个将IEEE-754单精度双精度浮点数转换为十进制数的程序 . 该程序有一个 java.lang.NumberFormatException 抛出 . 我希望有人向我解释为什么会抛出它以及我应该如何修复它 .//This is the ...

    所以我目前正在开发一个将IEEE-754单精度和双精度浮点数转换为十进制数的程序 . 该程序有一个 java.lang.NumberFormatException 抛出 . 我希望有人向我解释为什么会抛出它以及我应该如何修复它 .

    //This is the method being used for the IEEE-754 double-precision to decimal

    //line 5 is where the error is thrown

    1 double deciFinal;

    2 System.out.println("What IEEE-754 double precision floating-point representsation will you like to input?");

    3 ieee754 = input.nextLine();

    4 ieee754 = ieee754.trim();

    5 deciFinal = Double.longBitsToDouble(Long.parseLong(ieee754,2));

    6 System.out.println(deciFinal);

    //This is the method being used for the IEEE-754 single-precision to decimal

    //Line 5 is also where the error is being thrown.

    1 int binIeee;

    2 float deciFinal;

    3 System.out.println("What IEEE-754 single precision floating-point representsation will you like to input?");

    4 ieee754 = input.nextLine();

    5 deciFinal = Float.intBitsToFloat(Integer.parseInt(ieee754, 2));

    6 System.out.println(deciFinal);

    如果您想参考它以帮助我自己了解更多,这是我的完整代码

    import java.util.Scanner;

    /**

    *

    * @author Edwin

    */

    public class DecimalToIEE754 {

    public static void main(String[]args){

    int choice;

    Scanner input = new Scanner(System.in);

    do{

    double deciNum;

    String ieee754 = " ";

    int bitsVal;

    String bitsString;

    System.out.println("Hello Welcome to the Decimal and IEEE-754 converter");

    System.out.println("Please select the number that correspondes with the conversion you will like:"

    + "\n 1) Convert decimal number to IEEE-754 Single Precision Floating-Point Representation"

    + "\n 2) Convert decimal number to IEEE-754 Double Precision Floating-Point Representation"

    + "\n 3) Convert IEEE-754 Single Precision Floating-Point Representation to decimal number"

    + "\n 4) Convert IEEE-754 Double Precision Floating-Point Representation to decimal number "

    + "\n 0) Exit Converter");

    choice = input.nextInt();

    if(choice == 1)

    {

    System.out.println("What decimal number will you like to convert?");

    deciNum = input.nextDouble();

    float f = (float)deciNum;

    bitsVal = Float.floatToIntBits(f);

    bitsString = Integer.toBinaryString(bitsVal);

    System.out.println(bitsString);

    }

    if(choice == 2)

    {

    System.out.println("What decimal number will you like to convert?");

    deciNum = input.nextDouble();

    bitsString = Long.toString(Double.doubleToLongBits(deciNum), 2);

    System.out.println(bitsString);

    }

    if(choice == 3)

    {

    int binIeee;

    float deciFinal;

    System.out.println("What IEEE-754 single precision floating-point representsation will you like to input?");

    ieee754 = input.nextLine();

    **deciFinal = Float.intBitsToFloat(Integer.parseInt(ieee754, 2));**

    System.out.println(deciFinal);

    }

    if(choice == 4)

    {

    double deciFinal;

    System.out.println("What IEEE-754 double precision floating-point representsation will you like to input?");

    ieee754 = input.nextLine();

    ieee754 = ieee754.trim();

    **deciFinal = Double.longBitsToDouble(Long.parseLong(ieee754,2));**

    System.out.println(deciFinal);

    }

    }while (choice != 0);

    }

    }

    一旦我为Ieee-754输入3或4转换为十进制,就会出现错误 . 它不允许我输入Ieee-754号码 . 完整的错误是:

    Exception in thread "main" java.lang.NumberFormatException: For input string: ""

    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

    at java.lang.Integer.parseInt(Integer.java:504)

    at DecimalToIEE754.main(DecimalToIEE754.java:53)

    Java Result: 1

    展开全文
  • 关于单精度 双精度的概念

    千次阅读 2014-10-28 09:59:51
    单精度双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给...

    单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念:

    当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。

    基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值5.1,很可能存储在单精度/双精度数值中的实际值是5.100000000001或者5.09999999999999。

     

    实现

    单精度浮点数在机内占4个字节,用32位二进制描述。
    双精度浮点数在机内占8个字节,用64位二进制描述。

    浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
    数符占1位二进制,表示数的正负。
    指数符占1位二进制,表示指数的正负。
    尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
     
    附录——有效数字

    1)“0”在数字前,仅起定位作用,“0”本身不是有效数字,如0.0275中,数字2前面的两个0都不是有效数字,这个数的有效数字只有3位。

    2)“0”在数字中,是有效数字。如2.0065中的两个0都是有效数字,2.0065有5位有效数字。

    3)“0”在小数的数字后,也是有效数字如6.5000中的3个0都是有效数字。0.0030中数字3前面的3个0不是有效数字,3后面的0是有效数字。所以,6.5000是5位有效数字。0.0030是2位有效数字

    4)以“0”结尾的正整数,有效数字的位数不定。如54000,可能是2位,3位或4位甚至5位有效数字。这种数应根据有效数字的情况改写为指数形式。如为2位,则写成5.4×104;如为3位,则写成5.40×104,等等。


    指数存指数的有效数字。

    指数占多少位,尾数占多少位,由计算机系统决定。
    可能是数符加尾数占24位,指数符加指数占8位 -- float.
    数符加尾数占48位,指数符加指数占16位 -- double.

    知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。

    对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。
    展开全文
  • 单精度 半精度 双精度Here you will learn aboutSingle Precision vs Double Precision. 在这里,您将了解单精度双精度。 When talking about the numbers, amount of precision that can be reached using a ...
  • 展开全部单精32313133353236313431303231363533e58685e5aeb931333365656466度与双精度的区别:1、单精度数是指计算机表达实数近似值的一种方式。单精度,也就是 float ,在 32 位机器上用 4 个字节来存储的;而...
  • 单精度 双精度单精度,也即float,一般在计算机中存储占用4字节,也32位,有效位数为7位;双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。 IEEE754规范: 单精度格式:1位符号,8位指数,23...
  • 单精度双精度的区别

    万次阅读 多人点赞 2019-02-26 16:56:24
    1、单精度双精度的字节数不同。前者占4个字节;后者占8个字节。 2、单精度双精度有效数字位数不同。前者为8位;后者为16位。 3、单精度双精度表示的数的范围不同。前者的数值范围在-3.40E+38 到 +3.40E+...
  • 单精度双精度

    2021-03-27 21:50:45
    单精度双精度 %lf 与%f:单精度双精度 学习c语言,在进行实验练习时遇到了单双精度的问题,在这里和大家分享下。 问题: 计算某市出租车收费标准下的收费,因为收费标准多样,现定:车费=起步价+超出起步的里程...
  • 单精度双精度区别

    千次阅读 2019-06-20 17:35:17
    单精度双精度区别(1)在内存中占有的字节数不同(2)有效数字位数不同(3)所能表示数的范围不同(4)在程序中处理速度不同 (1)在内存中占有的字节数不同 单精度浮点数在机内占4个字节 双精度浮点数在机内占8个...
  • 为什么会有精度问题?计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.。。。。。。无穷无尽,而精度是有限的,3....
  • c 语言单精度双精度的区别 c 语言单精度双精度的区别单精度是这样的格式 1 位符号 8 位指数 23 位小数 双精度是 1 位符号 11 位指数 52 位小数 区别就是它所能存储的数值范围大小不同 双精度变量能存储比单精度...
  • 单精度双精度问题

    2020-08-24 10:46:54
    一,什么是单精度双精度 单精度数(float)是指计算机表达实数近似值的一种方式。VB中Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1....
  • 展开全部单精度数是62616964757a686964616fe59b9ee7ad9431333431353330指计算机表达实数近似值的一种方式。VB中Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3....
  • 单精度双精度示意

    2018-11-22 14:19:11
    单精度是这样的格式,1位符号,8位指数,23位小数。   双精度是1位符号,11位指数,52位小数。   单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。 因为 10^7 < ...
  • 常用的浮点数有双精度单精度。除此之外,还有一种叫半精度的东东。 双精度64位,单精度32位,半精度自然是16位了。 半精度是英伟达在2002年搞出来的,双精度单精度是为了计算,而半精度更多是为了降低数据传输...
  • IEEE754字节转单精度/双精度浮点数
  • 双精度单精度和半精度

    万次阅读 多人点赞 2017-11-17 09:56:29
    常用的浮点数有双精度单精度。除此之外,还有一种叫半精度的东东。 双精度64位,单精度32位,半精度自然是16位了。 半精度是英伟达在2002年搞出来的,双精度单精度是为了计算,而半精度更多是为了降低数据...
  • 双精度单精度

    千次阅读 2018-10-04 11:02:07
    双精度单精度表示的位数大 精确的位数多, 简单地说, foat表示的小数点位数少,double能表示的小数点位数多! 如 float: 1.0001 double:1.0000000001Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,...
  • 单精度/双精度

    千次阅读 2019-02-09 18:17:02
    不管float还是double 在计算机... 双精度分别为1, 11, 52。 精度主要取决于尾数部分的位数,float为23位,除去全部为0的情况以外,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6...
  • 为什么会有精度问题?计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.。。。。。。无穷无尽,而精度是有限的,3....
  • 日常积累01–单精度双精度、半精度 计算的精度越高,意味着 所需的计算资源、数据传输和内存存储越多。 双精度格式占用64位 单精度格式占用32位 半精度格式占用16位 ...
  • 题对于实现精确IEEE 754算术的C99编译器,f的值,float类型的除数是否存在,使得f / divisor!...上下文提供符合IEEE 754标准的浮点的C编译器只能通过单次精度乘以逆来用常量替换单精度除法,如果所述逆本身可以表...
  • 详细介绍了单精度和双精度、扩展双精度在内存中的存储格式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,093
精华内容 2,437
关键字:

单精度双精度