精华内容
下载资源
问答
  • 单精度浮点型(float )专指占用32位存储空间的单精度(single-precision )值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对...


    引用一

     

    写道
    单精度浮点型(float )专指占用32位存储空间的单精度(single-precision )值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。例如,当表示美元和分时,单精度浮点型是有用的。这是一些声明单精度浮点型变量的例子:float hightemp,lowtemp;双精度型,正如它的关键字“double ”表示的,占用64位的存储空间。在一些现代的被优化用来进行高速数学计算的处理器上双精度型实际上比单精度的快。所有超出人类经验的数学函数,如sin( ),cos( ) ,和sqrt( )均返回双精度的值。当你需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。

     

    引用二:

    写道
    用4个字节(32位)来存放一个浮点数,尾数有7个有效数字左右,叫单精度浮点数,用64位来存放,尾数有效数字可以增加到15位或16位,叫双精度浮点数。

     

     

    展开全文
  • 首先,float单精度浮点型,计算机会分配4字节,32位来进行存储,而double float双精度浮点型,计算机则会分配8个字节,即64位来进行小数的存储,这是后面进行详细解释的必备知识。 其次,计算机在存储浮点型数据时,...

    1问题的提出

    最近在学习过程中,遇到了题目中出现的陈述,但是对于原因没有头绪,同时在互联网上很难找的到合理的我想要的解释,因此我搜罗了一些前人的知识,结合自己的理解,总结一下。

    2问题的解释

    首先,float单精度浮点型,计算机会分配4字节,32位来进行存储,而double float双精度浮点型,计算机则会分配8个字节,即64位来进行小数的存储,这是后面进行详细解释的必备知识。
    其次,计算机在存储浮点型数据时,会将浮点型数据分为3个部分来进行存储(至于为什么,规定),分别为:
    (1)符号位(这个熟悉整型的二进制存储应该知道的,首尾二进制0表示正数,1表示负数,不多说,占一个字节);
    (2)指数部分(计算机使用浮点型存储时,会将源数据转换为科学计数法来存储,例如,8.25,转化为二进制为1000.01,然后转化为科学计数法,注意是2进制,将底数10换为2为,1.00001 × 2的3次方,指数为3,这个指数部分的数据就是存储着源10进制数据转换为2进制时科学计数法表示的指数相关,这里说的是相关,并不是存储着3,多说一句,这个指数部分的首位二进制表示着指数的正负,换句话说,1表示源十进制数的绝对值大于等于1,0表示小于1,更多了解,自行见文尾参考链接
    (3)尾部存储的是二进制科学计数法的所精确的小数数值(二进制存储),例如1.00001 × 2的3次方的00001,超出存储位数‘四舍五入’,不足位数补向左补0.
    具体float和double float见下图:
    float类型:
    在这里插入图片描述
    double float类型
    在这里插入图片描述
    至于其中的指数部分为什么是8和11,没法解释,这么设计的。
    即,符号位都是表示源十进制数据的正负,指数部分的首位都是0或1表示二进制科学计数法的指数正负,其余位数存储着和指数相关的值,最后尾数部分存储着二进制科学计数法的小数部分数值。
    因此,尾数部分决定着精确的实际能够存储的十进制数据位数精度:
    (1)单精度:23位能存储的数据量为2的(23+1)次幂为16777216,结果取10常用对数发现,在7和8之间,因此,精度最大不要超过7位小数,常常称为不要超过6位
    (2)双精度:相应地,对于双精度的64位存储,去掉首尾符号位1字节和指数部分的11字节,尾数的52字节能存储最大数据量为2的(52+1)次幂为9007199254740992,同样发现,最大的十进制小数位位数16~17之间,因此最好不要超过15位

    最后

    不知道大家有没有理解,下面是我发现写的非常好的文章,有更深度需求的同学可以参考。
    参考链接:https://www.cnblogs.com/Reverse-xiaoyu/p/11618913.html

    展开全文
  • 关于16进制浮点数对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;2、第30~23 bit为幂数,其读...

    文章来源:http://blog.csdn.NET/educast/article/details/8522818

    感谢原作者。

     

    关于16进制浮点数
    对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数), 
    1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示; 
    2、第30~23 bit为幂数,其读数值用e表示; 
    3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;

    则按照规定,该浮点数的值用十进制表示为: 
    = (-1)^s * (1 + x) * 2^(e - 127)

    对于49E48E68来说, 
    1、其第31 bit为0,即s = 0 
    2、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。 
    3、第22~0 bit依次为110 0100 1000 1110 0110 1000,也就是二进制的纯小数0.110 0100 1000 1110 0110 1000,其十进制形式为0.78559589385986328125,即x = 0.78559589385986328125。

    这样,该浮点数的十进制表示 
    = (-1)^s * (1 + x) * 2^(e - 127) 
    = (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127) 
    = 1872333

    以上内容为IEEE的标准,现在有个问题,假设我有两台设备在通讯,一个设备向另外一个设备发送数据,这个数据是浮点数,那么我怎么来发送这个数据呢?怎么让接受方知道发送来的是个浮点数呢?而且发送数据要尽量短,最好还要固定长度,也许有人会怎么做:A发送数据3.7586给B,A先将这个浮点数乘以10000变成整型37586,然后将这个整数发送给B,这样使用的弊端是:1、B要事先知道A将这个数字放大了多少倍。2、A需要做一次浮点数的乘法运算,而B要做一次浮点数的除法运算,这对于单片机来说是个负担。3、这样使用会多占用发送数据。因为事先没人知道这个浮点数到底多大。

    想了半天,觉得使用IEEE的浮点数规则来发送是最可靠的,因为任何浮点数都被表示成4个字节,这对发送和接收双方都是个好消息,只要双方都知道要进行浮点数的发送就可以了。而且IEEE格式浮点数的转换是机器内部执行的,我们不再需要任何的转换,不增加运算量,不增加代码量。
    按照这个原则,编写了测试代码如下:
    发送方A:
    float fSend; //A需要发送的浮点数据
    char chSend[4]; //发送缓冲,经过转换后的浮点数据,变成一个字符型数组。
    //以下为转换
    chSend[0] = *((char *)(&fSend));
    chSend[1] = *((char *)(&fSend) + 1);
    chSend[2] = *((char *)(&fSend) + 2);
    chSend[3] = *((char *)(&fSend) + 3);

    此时A就可以将这个数字发送给B了,B接收到的是4个字节表示的一个浮点数,但需要经过如下转换使用:

    float fReceive; //接收到的浮点数
    char chReceive[4];//接收缓冲。B将接收到的4个字节保存在这里。
    //以下为转换
    *((char *)(&fReceive)) = chReceive[0];
    *((char *)(&fReceive) + 1) = chReceive[1];
    *((char *)(&fReceive) + 2) = chReceive[2];
    *((char *)(&fReceive) + 3) = chReceive[3];

    好了,此时的B已经得到了一个浮点数fReceive;

    转载于:https://www.cnblogs.com/zhangbing12304/p/7027965.html

    展开全文
  • //------------------------------------------------------------------------------------------------------------------------------------------// windows ----GPS #include <stdio.h>...

    //------------------------------------------------------------------------------------------------------------------------------------------//

    windows ----GPS

    #include <stdio.h>
    //联合fnum存储数据
    union fnum
    {
    int m;
    float f;
    };
    int main(int argc, char *argv[])
    {
    union fnum num;
    num.m=0x40a80000;//十六进制数赋值给整数
    printf("十六进制输出int:0x%x\n",num.m);//输出0x40a80000
    printf("十进制输出float:%f\n",num.f);//输出5.250000
    return 0;
    }

    //-------------------------------------------------------------------------------------------------------------------------------------//

    #include <stdio.h>


    int main()

    {

        long int n;  //Tc3.0ºÃÏñÊÇ16λ±àÒëÆ÷

        printf("ÊäÈë8λ16œøÖÆÊý£º");

        scanf("%x",&n);

        printf("%f\n",*((float*)&n));

        return 0;

        

    }

     

    //--------------------------------------------------------------------------------------------------------------------------------------------//

    2)

    #include<stdio.h>

    int main()

    {

        long int n;  //Tc3.0ºÃÏñÊÇ16λ±àÒëÆ÷

        printf("ÊäÈë8λ16œøÖÆÊý£º");

        scanf("%x",&n);

        printf("%f\n",*((float*)&n));

        return 0;

        

    }

    //---------------------------------------------------------------------------------------------------------------------------------------------------//

    3)

        #include <stdio.h>

    int main(void)

    {

     

        float a=0.0f;

        unsigned char * b = (unsigned char*)&a;

        char c[4] = {0x4B,0xDA,0x74,0x0C};

        int i = 0;

        printf("b1:%d\n",b);

        for(i = 0; i<4; i++){

            b[i] = (unsigned char)c[i];

        }

        printf("b2:%d\n",*b);

        printf("œá¹ûΪ£º\n");

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

        //printf("a:%d\n",a);

    }

    //--------------------------------------------------------------------------------------------------------------------------------------------------//

    4)

    #include <stdio.h>



    float Hex_To_Decimal(unsigned char *Byte,int num)//Ê®ÁùœøÖƵœž¡µãÊý



    {

    int i;



    char cByte[4];//·œ·šÒ»



     for (i=0;i<num;i++)



     {



    cByte[i] = Byte[i];



     }







     float pfValue=*(float*)&cByte;



    return pfValue;



    return *((float*)Byte);//·œ·š¶þ



    }



    long FloatTohex(float HEX)//ž¡µãÊýµœÊ®ÁùœøÖÆת»»1



    {



    return *( long *)&HEX;



    }



    void FloatToByte(float floatNum,unsigned char* byteArry)ž¡µãÊýµœÊ®ÁùœøÖÆת»»2



    {

        int i;

    char* pchar=(char*)&floatNum;



    for(i=0;i<sizeof(float);i++)



    {



    *byteArry=*pchar;



    pchar++;



    byteArry++;



    }



    }



    void main()



    {



    unsigned char floatToHex[4];



    unsigned char hexbyte[4]={0x4b,0xda,0x74,0x0c};//Ž«ÊäÊýŸÝΪ3d cc cc cd



    float Hdecimal=0.0;



    float flh=0.4;



    // int num=sizeof(hexbyte);



    // printf("num= %d\n",num);



    Hdecimal=Hex_To_Decimal(hexbyte,sizeof(hexbyte));//Ê®ÁùœøÖÆת»»Îªž¡µãÊý



    printf("\n ž¡µãÊýΪ£º\n %f\n",Hdecimal);



    long hX=FloatTohex(Hdecimal);//ž¡µãÊýת»»ÎªÊ®ÁùœøÖÆÒ»



    printf("\nÕýÐòÊ®ÁùœøÖÆÖµ£º\n %f=%X \n",Hdecimal,hX);//ÕýÐòÏÔÊŸ



    FloatToByte(Hdecimal,floatToHex);//ž¡µãÊýתΪʮÁùœøÖƶþ



    printf("\nµ¹ÐòÊ®ÁùœøÖÆ£º\n%f=%x %x %x %x\n",Hdecimal,floatToHex[0],floatToHex[1],floatToHex[2],floatToHex[3] );//µ¹ÐòÏÔÊŸ



    FloatToByte(flh,floatToHex);//ž¡µãÊýתΪʮÁùœøÖƶþ



    printf("\nµ¹ÐòÊ®ÁùœøÖÆ£º\n%f=%x %x %x %x\n",flh,floatToHex[0],floatToHex[1],floatToHex[2],floatToHex[3] );//µÍλÔÚÇ°



    FloatToByte(flh,floatToHex);//ž¡µãÊýתΪʮÁùœøÖƶþ



    printf("\nÕýÐòÊ®ÁùœøÖÆ£º\n%f=%x %x %x %x\n",flh,floatToHex[3],floatToHex[2],floatToHex[1],floatToHex[0] );//žßλÔÚÇ°



    }

    转载于:https://www.cnblogs.com/dpf-learn/p/7028142.html

    展开全文
  • 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据...六种数字类型(四个整数(默...
  • 1、操作数预处理 begin rA <= { A[31], A[30:23], 1’b1, A[22:0] }; rB <= { B[31], B[30:23], 1’b1, B[22:0] }; end 2、运算 begin isSign <= A[31] ^ B[31]; BDiff = rB[31:24] - 8...= rA[31:24] - B...
  • 待写。。。。
  • 现在我们研究一下浮点型运算为什么会造成精度丢失? 1、小数的二进制表示问题 首先我们要搞清楚下面两个问题: (1) 十进制整数如何转化为二进制数 算法很简单。举个例子,11表示成二进制数: 11/2=5 ...
  • #include <stdio.h> struct Student { unsigned int mun; char name[20];... printf("最高分的学生数据:\n学号:%u 姓名:%s 3门课的成绩:%.2f %.2f %.2f 平均分数:%.2lf\n", zuigaofen->...
  • 16进制单精度浮点型 数据如下 , 010342D90309FA407223B041C7099142BD0000000000000000CCCD3DCCF51B3E10FBA941800000000000000000000000000000000000000000000000000000000025464141DB51 如何解析出来?? 在线...
  • 网上直接给出了下面的方法: char m[]={0x11, 0x22, 0x33, 0x44}; float f=*((float *)m); //这儿的float占4个字节 经本人测试,上面的方法在原理上是完全正确的。...不同的系统对于发送来的字节的顺序可能不同,...
  • 单精度与双精度浮点型

    千次阅读 2014-09-16 20:41:53
     为作为浮点数的小数表示,单精度浮点数 float  由符号位 1  位, 指数域位 k   =8  位,小数域位 (   尾数   )n=23  位构成,因此对上面得到的 21  位小数位我们还需要补上 2  个 0  ,得到浮点数的小...
  • float转换double时会造成精度丢失,我的一个解决办法是,将float转换为string,再转换为double如:floatf=3.141592Fdoubled=Convert.ToDouble(f.ToString());个人感觉,尽量避免double转float,虽然强制转换不...
  • 摘 要: 采用Verilog HDL语言, 在FPGA上实现了32位单精度浮点乘法器的设计, 通过采用改进Booth编码,和Wallace 树结构, 提高了乘法器的速度。本文使用Altera Quartus II 4.1仿真软件, 采用的器件是EPF10K100EQ 240...
  • 单精度,双精度浮点存储表示 剖析float的精度丢失问题
  • 浮点型变量精度问题

    2013-07-10 23:13:05
    在c语言中,单精度浮点型的精度为7位有效数字,双精度浮点型的精度为16位有效数字,超过此有效数字的部分会被“四舍五入”,python decimal对象的精度可以达到任意值(可以很大,通过getcontext.prec = *来设置精度...
  • 浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而...
  •  // 单步调试发现其真实值为:0.45000000000000001当很多个这样的单精度浮点型数据进行运算时,就会有累积误差,使得运算结果达不到理想的结果。尤其是对那种需要判断相等的情况(浮点型数据判断相等会有...
  • 浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而...
  • Python 基础数据类型了解 Python ...Python 的基本数据类型划分为了两个维度:最基本的类型复杂的数据类型最基本的类型包括:int 整型float 浮点型 (python 中的浮点型没有、双精度的概念)complex 复数 (12j)b...
  • 本文就带各位温顾温顾java浮点型单精度浮点数、双精度浮点数。 浮点型 浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而恰恰小数点可以在相应的二进制的不同位置浮动,可能是...
  • 浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而...
  • 浮点型数据类型

    2021-01-16 16:44:40
    float:单精度浮点型 double:双精度浮点型 decimal:数字型 单精度和双精度 精度是指计算机表达小数近似值的一种方式; 单精度32位二进制,4个字节; 双精度64位二进制,8个字节。 类型 精度(位数) float 7...
  • 32位单精度浮点乘法器的FPGA实现

    千次阅读 2009-05-05 23:16:00
    摘 要: 采用Verilog HDL语言, 在FPGA上实现了32位单精度浮点乘法器的设计, 通过采用改进Booth编码,和Wallace 树结构, 提高了乘法器的速度。本文使用Altera Quartus II 4.1仿真软件, 采用的器件是EPF10K100EQ 240...
  • 浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而...
  • 浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而...
  • 浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而...
  • C语言中双精度浮点型什么意思

    千次阅读 2008-10-20 09:40:00
    双精度占8 个字节(64位)内存空间 其数值范围为3.4E-38~3.4E+38 double(双精度说明符) 单精度型占4个字节(32位)内存空间 float(单精度说明符) 其数值范围为1.7E-308~1.7E+308 只能提供七位有效数字 可...

空空如也

空空如也

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

单精度浮点型