精华内容
下载资源
问答
  • C语言浮点数表示
    千次阅读
    2021-01-01 16:57:10

    c语言中出现浮点数计算时,然而定义数据类型是int的情况下,解决方案有两种:

    方案一:改数据类型为 double,注意输出时,格式化需将%d改成%f

    #include <stdio.h>
    
    int main()
    {
    	printf("请分别输入身高的英寸和英尺,\n"
    	"如输入\"5,7\"表示5英尺7英寸:");
    	
    	const double S = 0.3048;
    	double foot;
    	double inch;
    	
    	scanf("%lf,%lf",&foot,&inch);
    	
    	printf("身高是%f米",((foot+inch/12)*S));
    	
    	return 0;

    方案二:将在计算的值变成小数(如12→12.0),注意输出时,格式化需将%d改成%f

    #include<stdio.h>
    
    int main()
    {
    	printf("请分别输入身高的英尺和英寸,\n"
    	"如输入\"5,7\"表示5英尺7英寸:");
    	
    	const double S = 0.3048;
    	int foot;
    	int inch;
    	
    	scanf("%d,%d",&foot,&inch);
    	printf("身高是%f米。\n",((foot+inch/12.0)*S));
    	
    	return 0;	
    	

     

    更多相关内容
  • 浮点数表示方法

    万次阅读 多人点赞 2018-12-11 21:01:06
    浮点数表示  浮点数是一种 公式化 的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡(因此被称为浮点数)。 浮点数通常被表示为: N=M×R^E 比如: 12.345=1.2345×10^1 其中,...

    之前的一些工作当中碰到了很多有关浮点数的问题,比如浮点数的表达范围、表达精度、浮点数的存储方式、浮点数的强制类型转换等等,因此感觉有必要系统了解一下有关浮点数的问题。

    浮点数表示 

    浮点数是一种 公式化 的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡(因此被称为浮点数)。

    浮点数通常被表示为:

    N=M×R^E

    比如: 12.345=1.2345×10^1

    其中,M(Mantissa)被称为浮点数的 尾数 ,R(Radix)被称为阶码的 基数 ,E(Exponent)被称为阶的 阶码 。计算机中一般规定R为2、8或16,是一个确定的常数,不需要在浮点数中明确表示出来。

    因此,在已知标准下,要表示浮点数,

    一是要给出尾数M的值,通常用定点小数形式表示,它决定了浮点数的表示精度,即可以给出的有效数字的位数。

    二是要给出阶码,通常用定点整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。因此,在计算机中,浮点数通常被表示成如下格式:(假定为32位浮点数,基为2,其中最高位为符号位)

    浮点数

    浮点数的规格化表示 

    按照上面的指数表示方法,一个浮点数会有不同的表示:

    0.3×10^0;0.03×10^1;0.003×10^2;0.0003×10^3;

    为了提高数据的表示精度同时保证数据表示的唯一性,需要对浮点数做规格化处理。

    在计算机内,对非0值的浮点数,要求尾数的绝对值必须大于基数的倒数,即|M|≥1/R。

    即要求尾数域的最高有效位应为1,称满足这种表示要求的浮点数为规格化表示:把不满足这一表示要求的尾数,变成满足这一要求的尾数的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改阶码实现。

    比如,二进制原码的规格化数的表现形式:(0正1负)

    正数 0.1xxxxxx

    负数 1.1xxxxxx

    注意,尾数的最高位始终是1,因此我们完全可以省略掉该位。

    至此,我们引入IEEE754 标准,该标准约束了浮点数的大部分使用设置:(尾数用原码;阶码用“移码”;基为2)

    (1) 尾数用原码,且隐藏尾数最高位。

    原码非0值浮点数的尾数数值最高位必定为 1,因此可以忽略掉该位,这样用同样多的位数就能多存一位二进制数,有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。

    (2) 阶码使用“移码”,基固定为2

    如下图的32bit浮点数和64bit浮点数,从最高位依次是符号位、阶码和尾数 

    float
    于是,

    一个规格化的32位浮点数x的真值为:

    x=(−1)^s×(1.M)×2E^−127

    一个规格化的64位浮点数x的真值为:

    x=(−1)^s×(1.M)×2E^−1023

    下面举一个32位单精度浮点数-3.75表示的例子帮助理解:

    (1) 首先转化为2进制表示

    −3.75=−(2+1+1/2+1/4)=−1.111×2^1

    (2) 整理符号位并进行规格化表示

    −1.111×2^1=(−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^1

    (3) 进行阶码的移码处理 
    (−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^1
     
    =(−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^(128−127)

    于是,符号位S=1,尾数M为1110 0000 0000 0000 0000 000
    阶码E为12810=1000 00002
    ,则最终的32位单精度浮点数为

    1 1110 0000 0000 0000 0000 000 1000 0000

    浮点数的表示范围 

    通过上面的规格化表示,我们可以很容易确定浮点数的表示范围:

    float range

    既然有表示范围,那肯定也有不能表示的数值: 
    首先来说明溢出值,如下图: 

    float overflow


    (1)无穷值:

    如果指数E=11111111(2)=255(10)
    且尾数M=0
    ,则根据符号位S分别表示+∞
    和−∞
    。因此,一个有效的32位浮点数其指数最大只能为254。

    此外,无穷具有传递性,比如

    (+∞) + (+7) = (+∞)

    (+∞) × (−2) = (−∞)

    (+∞) × 0 = NaN

    (2)零值:

    如果指数E=0
    且尾数M=0
    时,表示机器0.需要注意的是,这里的0也是有符号的,在数值比较的时候 +0=−0
    ; 但在一些特殊操作下,二者并不显相等,比如log(x), 1/+0≠1/−0。

    此外,处于负下溢出和负上溢出之间的数值会被直接归为0。

    (3)NAN:

    如果E=0,且尾数M≠0,则表示这个值不是一个真正的值(Not A Number)。NAN又分成两类:QNAN(Quiet NAN)和SNAN(Singaling NAN)。QNAN与SNAN的不同之处在于,QNAN的尾数部分最高位定义为1,SNAN最高位定义为0;QNAN一般表示未定义的算术运算结果,如0/0, ∞×0, sqrt(−1);SNAN一般被用于标记未初始化的值,以此来捕获异常。

    浮点数的表示精度

    一般提到浮点数的精度(有效位数)的时候,总是会出现 float的有效位为6~7位, double的有效位为15~16位 。

    下面以float为例,解释一下有效位数是怎样来的。

    有效位数只和规格化浮点数的尾数部分有关,而尾数部分的位数是23位,因此我们首先列出下表

    float overflow

    由上面的表格可以看出:

    2^−23 和 2^−22 之间是存在间隔的,即0.0000001和0.0000002之间的小数我们是没有办法描述的,因此23位尾数最多只能描述到小数点后第7位;此外,我们通过四舍五入可以很容易发现0.0000003=0.0000004=2^−23+2^−22
    , 这表明第7位有效数字只是部分准确。而第6位及之前的都是可以准确描述的,因此我们说float的有效位为6~7位。

     参考资料 

    (1) WIKI 词条 “Floating Point”: https://en.wikipedia.org/wiki/Floating_point

    (2) WIKI 词条 “IEEE floating point”: https://en.wikipedia.org/wiki/IEEE_floating_point

    (2) 浮点异常值:NAN,QNAN,SNAN: 
    http://www.cnblogs.com/konlil/archive/2011/07/06/2099646.html
    --------------------- 
    作者:shuzfan 
    来源:CSDN 
    原文:https://blog.csdn.net/shuzfan/article/details/53814424 

    展开全文
  • 浮点数表示方法

    千次阅读 2021-07-25 04:51:35
    1、浮点数的表示方法 一、浮点数表示 一个数的浮点形式(设基数是2)可写成:N = M 2E其中:M代表尾数,E代表阶码。 计算机中浮点数只用尾数和阶码表示,其形式如下:阶码尾数符号尾数浮点数的精度由尾数决定,数的表示...

    《浮点数的表示方法》由会员分享,可在线阅读,更多相关《浮点数的表示方法(2页珍藏版)》请在人人文库网上搜索。

    1、浮点数的表示方法 一、浮点数表示 一个数的浮点形式(设基数是2)可写成:N = M 2E其中:M代表尾数,E代表阶码。 计算机中浮点数只用尾数和阶码表示,其形式如下:阶码尾数符号尾数浮点数的精度由尾数决定,数的表示范围由阶码的位数决定。为了最大限度提高精度,尾数采用规格化形式,既1/2M1。采用二进制表示时,若尾数大于零,则规格化数应该是01XXXX的形式;若尾数小于零,则规格化数应为10XXXX的形式。 二、机器零 当浮点数的尾数为0或阶码为最小值时,计算机通常把该数当作零,因此程序中进行浮点运算时,判断某数是否为零,通常可以用小于某个极小值来代替。 三、实例 【例1】设X=0.011023。

    2、 ,用补码、浮点数形式表示阶码为Xj=011,尾数为00110,这时由于X尾数不符合01XXXX的形式,因此不是规格化数,必须先进行规格化处理。方法:若尾数小于1/2,把尾数左移一位(不包括符号位),观察结果是否满足规格化条件,满足则在把阶码减1即可,否则继续左移和调整阶码;若尾数大于1,则把尾数右移一位(不包括符号位),观察结果是否满足规格化条件,满足则在把阶码加1即可,否则继续右移和调整阶码。上例中,00110左移一位为01100,符合规则化标准,此时阶码减1,为010即得到浮点表示形式。这个数具体在计算机中如何表示要看计算机中规定的阶码和尾数的位数,若阶码和尾数均为16位,则上面的数X在计算机内部表示就是 00000000000000100110000000000000 ,不足均用零填充。

    展开全文
  • 初步了解机器中浮点数表示方法

    千次阅读 2019-04-13 19:16:59
    浮点数是小数点位置变化的数,能表示的范围比定点数大很多。 比如二进制数11.11可以表示为111.1×2-1或1.111×21等,我们由此规律能得到二进制数更一般形式N=2E×F,E称为阶码,F称为尾数。这个数在机器里怎么存呢,...

    浮点数是小数点位置变化的数,能表示的范围比定点数大很多。

    比如二进制数11.11可以表示为111.1×2-1或1.111×21等,我们由此规律能得到二进制数更一般形式N=2E×F,E称为阶码,F称为尾数。这个数在机器里怎么存呢,是把正负符号、2、E、E的正负号、F转为01序列存起来吗?

    如果由我们自己来设计计算机,这样的确可以,不过总有人会想出更聪明的办法。首先符号位必须占一位,2可以省略不存,默认的。阶码E转为移码存,这样就不用存阶码的正负符号了。最后是很讲究的尾数,尾数为0当然直接存0,不为0时,尾数域的最高位必须为1,比如0.001×20必须要变0.1×2-2,也就是小数点后不能为0,像0.001小数点后为0,就要变化阶码,使得小数点移到1前变成0.1,然后只存小数点之后的数,这个过程叫尾数规格化。

    所以一般来说,浮点数的机器码表示如下:

    符号位阶码 (移码)尾数(定点小数)

    现实中具体到底如何实现有许多方法,比如阶码放在尾数后,符号位放在阶码后,阶码用补码表示等。
    用一道题目来帮助理解:
    在这里插入图片描述
    在这里插入图片描述
    如图1所示为计算机中16位浮点数的表示格式。
    某机器码为1110001010000000。
    若阶码为移码且尾数为反码,其十进制真值为 (1) ;
    若阶码为移码且尾数为原码,其十进制真值为 (2) ;
    若阶码为补码且尾数为反码,其十进制真值为 (3) ;
    若阶码为补码且尾数为原码,其十进制真值为 (4) ,将其规格化后的机器码为 (5) 。
    (1) ~ (4)
    A.0.078125
    B.20
    C.1.25
    D.20.969375
    (5)
    A.1110001010000000
    B.11110101000000
    C.1101010100000000
    D.11110001010000

    我的分析:
    (1)阶码为移码,即1110为移码,对应原码为0110,其十进制真值为6,尾数001010000000为反码,正数反码换成原码为原形式,其对应十进制真值为2-2+2-4=0.3125,所以整个数十进制真值为26×0.3125=20
    (2)阶码为移码,尾数为原码,和(1)是一样的。

    (3)阶码为补码,补码1110对应的原码为1010,即-2,尾数为反码,(1)已经分析过为0.3125,则整个数十进制真值为2-2×0.3125=0.078125
    (4)阶码1110为补码,真值为-2,尾数为原码,同(3)

    (5)浮点数规格化表示,是尾数值不为0时,尾数域最高有效位要为1,比如0.001×20必须要变0.1×2-2, 题目中尾数域为001010000000第一个0为符号位不管,第二个0是可以消去的,变成010100000000,这样消去后,阶码要相应地减1变为1101,故规格化后的机器码1101010100000000

    有个名叫IEEE-754的标准就统一了浮点数具体实现方法,目前大多数高级语言都按照IEEE-754标准来规定浮点数的存储格式,比如Java,还有我们熟知的C语言。

    按IEEE-754标准定义的单精度浮点数float:

    符号位阶码 (移码)尾数(定点小数)
    0位1~8位9~31位

    双精度浮点数double

    符号位阶码 (移码)尾数(定点小数)
    0位1~11位12~63位

    IEEE-754中尾数的规格化有所不同,之前我们说尾数规格化规定小数点后为1,IEEE-754中就将此固定的1设为默认值去掉了,因此尾数域表示的值为1.xxxx(只存储xxxx,1是默认有的),这样使得尾数表示范围多上一位。

    IEEE-754中阶码的移码也有特别规定,要除去阶码的全0和全1状态,因此像float中阶码的取值不是0~255,而是1 ~ 254,也就是说这里的阶码的移码不是简单地由补码变符号而来,还要减1,换个说法就是偏移量不为128了,而为127。所以对于float来说,真正指数的范围为-126 ~+127,所表示的数范围也就为2-126 ~2127即10-38 ~1038
    举个栗子
    在这里插入图片描述
    将176.0625表示为符合IEEE-754标准的单精度浮点数。

    1. 首先将176.0625化为二进制:10110000.0001
    2. 尾数规格化:1.01100000001×27,因此尾数域求出来了,为01100000001
    3. 阶码的移码:7的二进制为00000111,移码为10000110。
    4. 拼接:0 10000110 01100000001000000000000
      尾数域记得要补0使尾数有23位。
    展开全文
  • 浮点数的二进制表示方法

    万次阅读 2018-09-04 11:09:17
    浮点数的二进制表示 Double型,64位 例一: 已知:double类型38414.4,求:其对应的二进制表示。 分析:double类型共计64位,折合8字节。...由最高到最低位分别是第63、62、...步骤:按照IEEE浮点数表示法,下面先...
  • 16进制浮点数表示方法

    万次阅读 2016-05-03 13:30:30
    16进制浮点数表示方法,根据IEEE的标准,分为32位和64位两种,参数分别如下:    符号位 指数位 尾数位 指数偏移量  32位 1[31] 8[23-30] 23[0-22] 127    64位 1[63] 11[52-62] 
  • 浮点数是不精确的,因为浮点数在计算机的特殊的存储方式和十进制和二进制的转换有时候会出现无限循环情况。感兴趣的可以看一下参考资料。因此,在涉及到精确运算(如财务计算)的时候,不要使用浮点数浮点数不...
  • 计算机内部浮点数表示方法以及计算方式AND计算机内部浮点数加减法运算规则和步骤(包含实例)(32位为例) 一. 将215642.36421转换为浮点数表示格式 1.首先将整数部分转变为2进制: 215642/2=107821…0 107821/2=...
  • 定点数与浮点数表示方法

    千次阅读 2020-06-09 20:25:58
    一、定点数的表示方法 定点格式:即约定机器中所有数据的小数点位置固定不变。 由于约定的小数点位置固定不变,小数点就不再使用 “ . ” 表示。原理上,小数点位置固定在哪一位都可以,但是通常将数据表示为纯小数...
  • 用一个n+1位来表示一个定点纯小数,首位为符号位,1表示定点数为负数,0表示定点数为正数,小数点就位于符号位之后。 纯小数的范围大小        纯小数绝对值最大计算:尾数都为1...
  • 关于IEEE浮点数表示

    2020-09-25 11:49:50
    计算机表示整数是精确的,这得益于任何一个整数都可以转换为若干个2的幂次方相加 关于整数其主要包含两大类: 无符号整数:以unsigned int 32位无符号整型为例: 其表示的值是所有相应二进制位中为1的位对应2的...
  • 浮点数表示总结

    千次阅读 2018-09-18 18:32:26
    这种表示法类似于十进制中的科学计数法——它的优点是数的数量级、精确度以及数值都非常准确,浮点数表示其基数为 22,因此一个浮点数 aa 由两个数 mm 和 ee来表示:a=m×bea=m×be,其中 bb 表示基数,...
  • 定点数和浮点数表示

    千次阅读 2020-07-29 20:44:36
    计算机中常用的数据表示格式有两种,一种是定点格式,二是浮点格式。定点数和浮点数的意思是,小数点的位置是固定的还是浮动的。一般来说定点格式能表示的数值范围有限,单要求处理的硬件简单一些。浮点格式能表示的...
  • 一、表示方法在计算机中,浮点数一般由三部分组成:符号位+阶码+尾数。这种浮点数是用科学记数法来表示的,即:浮点数=符号位.尾数×2^阶码。根据IEEE 754国际标准,常用的浮点数有三种格式:(1) 单精度浮点数(32位...
  • 浮点数在计算机中的表示方法

    万次阅读 2019-04-21 20:47:49
    一个哥们在qq群里问了一个关于浮点数的程序,然后行了行浮点数的知识.竟然忘了,所有找了些文章.回忆回忆,理解理解 首先来聊天他的问题和让我无言以对的解决办法吧 "“十六进制转负数浮点数怎么转换啊” 然后我默默的...
  • 浮点数在计算机中的表示

    万次阅读 多人点赞 2018-07-23 22:44:11
    1.1 浮点数在计算机中的表示 1.1.1 指数偏移值 1.1.2 规约浮点数[1] 1.1.3 非规约浮点数 1.2 单精度和双精度浮点数 1.3 浮点数转二进制 1.3.1 无小数浮点数转二进制表示 1.3.2 含小数浮点数转二进制表示 1.4 ...
  • 浮点数表示 —— 基本格式、规格化、表示范围

    万次阅读 多人点赞 2019-07-14 22:15:04
    浮点数表示法是指以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。这样,在位数有限的情况下,既扩大了数的表示范围,又保持了数的有效精度。 阶码:阶码是整数,阶符和 m 位阶码的数值部分...
  • 浮点数二进制表示

    千次阅读 2018-07-29 20:59:42
    在讨论浮点数之前,先看一下整数在计算机内部是怎样表示的。  int num=9; 上面这条命令,声明了一个整数变量,类型为int,值为9(二进制写法为1001)。普通的32位计算机,用4个字节表示int变量,所以9就被保存...
  • 浮点数表示与运算

    千次阅读 2020-06-21 13:57:41
    一、IEEE浮点数标准 type(bits) sign bit(s) exponent(E) fractional value(M) single(32) 1 8 23 double(64) ...
  • 浮点数表示

    2019-05-02 14:18:47
    在计算机中,浮点数用 尾数 和 阶码 表示如下: 浮点数真值 = 尾数 ×( 2 ^ 阶码 ) 一般来说, 尾数数值:在 [ 1 ,2 ) 之间为有效数字 阶码:用整数表示的指数 ...这里只述说 单精度REAL4 的表示方法。...
  • 浮点数的二进制表示-实例

    千次阅读 2008-10-30 18:41:00
    /* 注意,形如2[3]表示2的3次方 */实例一:38414.4 的IEEE浮点数表示法(double):double型的指数域有11位,所以偏置值为 2[11-1]-1 = 102338414.4 = 1001011000001110.0110011001100110011001100110011001101 = 1....
  • 浮点数表示例题

    2021-06-24 01:28:52
    设 A=–0.101101*2-3,B= 0.101001*2-2,先将A、B表示为规格化的浮点数。要N=(+-)M2E其中:M代表尾数,E代表阶码。计算机中浮点数只用尾数和阶码表示,其形式如下:浮点数的精度由尾数决定,数的表示范围由阶码的位数...
  • 学习篇 | 浮点数表示规则

    千次阅读 2019-08-12 18:02:00
    导语 ...根据国际标准 IEEE (电气和电子工程协会)754,任意一个二进制浮点数 V 可以表示成下面的形式: (-1)^S * M * 2Ê (-1)^S表示符号位,当 S=0,V 为正数;当 S=1,V 为负数 M 表示有效...
  • 浮点数用十六进制表示方式附C代码

    千次阅读 2021-05-22 12:11:44
    浮点数用十六进制表示;我这里遇到的问题是知道数值,但需要把数值发送到上位机里显示波形,但是上位机是以浮点数的存储格式来解析的,但是我的单片机不支持...举例:已知一个数为12,他的浮点数表示为41400000h...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,168
精华内容 12,067
关键字:

浮点数表示方法举例

友情链接: xlickering.rar