精华内容
下载资源
问答
  • 单精度的取值和精度范围,表示的规则,补码的实际含义,单精度浮点数阶码使用移码的意义以及f32和f16转换规则

    取值范围及精度

    可以表示的范围为±3.40282 * 10^38(1.1111…1×2^127)即:

    0-11111110-11111111111111111111111(23个1)

    float最大值

    单精度浮点数可以表示1.175 * 10-38(1.00…0×2^-126)的数据而不损失精度。

    0-00000001-00000000000000000000001(22个0,最后一位是1)

    float最精确值

    浮点数最小能表示的是当阶码都是0时,表示2^-126*0.fractionbits

    这里写图片描述

    ps:以上图片是从 这个网址 截取。

    表示方式

    1. 如果指数位全零,尾数位是全零,那就表示0
    2. 如果指数位全零,尾数位是非零,就表示一个很小的数(subnormal),计算方式 (−1)^signbit × 2^−126 × 0.fractionbits(注意这里是0.fractionbits,应该是为了和阶码是-126的时候做出区分,其实也就是比-126的时候能表示的数更小了)
    3. 如果指数位全是1,尾数位是全零,表示正负无穷
    4. 如果指数位全是1,尾数位是非零,表示不是一个数NAN
    5. 剩下的计算方式为 (−1)^signbit × 2^(exponentbits−127) × 1.fractionbits

    补码

    到底什么是补码,一直到看了 这个知乎回答 之前,我对补码的概念就是反码加一,而且也没有想过到底为什么这样,有什么意义,看完之后才有些恍然大悟。

    首先,第一个问题,补码是用来做什么的?

    补码是用来方便ALU做减法运算的,因为补码是没有符号的,减一个数相当于加这个数的补码。

    所以,第二个问题就是,为什么减一个数相当于加一个数的补码呢?

    在回答这个问题之前,首先问一下,如果补码就是简单的反码加一为什么要叫补码,为什么不直接叫反码加一呢,这里就要提出一个概念,叫补数

    钟表的例子

    这个例子就是补数的直观理解,先假定表盘就表示0-11点,然后现在指针指向2点,如果我想将指针拨到3点有两个办法,第一个是顺时针拨1个格,第二个是逆时针拨11个格,在一个满刻度是12的表盘上,这两个的效果是一样的。抽象来讲,2 - 1 = 2+11

    这是为什么呢,这就有个的概念,模,当然数学上有抽象解释,我们这里就可以理解成数的表示极限大小,这里的模就是12,而对于十进制的两位数来说,模就是100。

    继续回到 2 - 1 = 2+11 这个问题,因为模是12,所以在这个模下,每个数有其补数,补数的意思就是模减其本身。这里1的补数就是 12 - 1 = 11.而减去一个数,就相当于加上这个数的补数,所以我们得到2 - 1 = 2+11。

    再以十进制两位数为例,90 - 10 = 80.10的补数是100-10=90,所以 90 -10 = 90 + 90(忽略百位,因为这里只有两位)。到这里总结一下,一个数的补数 = 模 - 这个数,一个数 - 另一个数 = 一个数 + 这个数的补数

    但是如果是10 - 90 怎么办,难道10 - 90 = 10 + 10,-80难道等于20?没错!我们想用数表示-80,却不让加负号,那就直接让-80 = 20。所以,一个负数就用它绝对值的补数来表示

    那么,现在的问题是,一个数既可以表示正数又可以表示负数,比如20既可以表示-80也可以表示20,那咋整,就规定0~99,0~49表示整数,50~99表示负数,90就代表-10这种。

    实际上

    对于浮点数的阶码是8位二进制数,其表示的极限是256(11111111表示255),所以模就是256,根据上面讲过的,将表示范围一分为二:00000001~01111111表示正数,10000000~11111110表示负数(全0和全1有特殊含义)。这样结合上面讲的知识就显而易见了,以10000000为例,256 - |x| = 128.所以表示的x=-128

    移码

    虽然补码解决了负数的问题,但是补码还是有一定的缺陷,就是比较大小不方便,而进行浮点数运算的时候,有一步是对阶,也就是比较阶码的大小然后再获得浮点数实际大小。为了方便比较大小,浮点数使用移码表示阶码。

    移码,顾名思义,就是当前码通过(在坐标轴上)移动之后获得的码,而移动的距离称为偏置(bias)。

    为什么移动之后就方便比较大小呢,具体如下图:

    不用移码的时候数轴是这样的:

    正常补码

    上面是实际的数,而下面是这些数代表的数,也就是上面讲的,254代表-2之类的。

    如果我们使得下面的数向右移动一格:

    移动一位

    可以看到,现在254代表的是-3了,再移动一格呢:

    移动两位

    依次类推,可以一直推到255代表的是最大的正数,这样,就可以直接通过比较码的大小来判断实际值的大小了,是不是很方便呢

    不过这里没有考虑全0和全1的情况,但是大概原理就是这样了。

    ps:为什么为什么用127做偏置而不是128:据说是为了让数的表示范围对称( 原文 ),但是感觉比较牵强而且也不比用128时对称

    半精度与单精度的转换

    主要是最近在研究f16和f32的转换才看了上面一堆东西,正题是f16和f32是怎么转换的。

    这个就简单了,由上面的知识可以推知,half的表示范围最大也就到65535,而float则很大,因此当half往float转换时,就是指数位转换到指数位,小数位低13位补零。当然考虑到阶码是移码,因此要-15+127才是最终的阶码。同理,从float转换到half也是,阶码-127+15,然后砍掉小数位后13位即可。

    这里要注意,如果float原本表示的数超过了half的表示范围,那么转换成的half就是阶码全是1的NaN。

    cite:Van Der Zijp J. Fast half float conversions[R]. Working paper, 2012ftp://www. fox-toolkit.org/pub/fasthalffloatconversion. pdf, 2008.

    展开全文
  • 为什么单精度浮点数的阶码取值范围是1-254

    万次阅读 多人点赞 2016-04-14 23:14:09
    例如,电子的质量(9×10-28克)和太阳的质量(2×1033克)相差甚远,在定点计算机中无法直接表示,因为小数点只能固定在某一个位置上,从而限制了数据的表示范围。 为了表示更大范围的数据,数学上通常采用科学...

    在定点数表示中存在的一个问题是,难以表示数值很大的数据和数值很小的数据。例如,电子的质量(9×10-28克)和太阳的质量(2×1033克)相差甚远,在定点计算机中无法直接表示,因为小数点只能固定在某一个位置上,从而限制了数据的表示范围。

    为了表示更大范围的数据,数学上通常采用科学计数法,把数据表示成一个小数乘以一个以10为底的指数。

    例如,在计算机中,电子的质量和太阳的质量可以分别取不同的比例因子,以使其数值部分的绝对值小于1,即:

    9×10-28 = 0.9×10-27

    2×1033 = 0.2×1034

    这里的比例因子10-27和1034要分别存放在机器的某个单元中,以便以后对计算结果按此比例增大。显然,这要占用一定的存储空间和运算时间。

    浮点表示法就是把一个数的有效数字和数的范围在计算机中分别予以表示。这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内自由浮动,改变指数部分的数值相当于改变小数点的位置。在这种表示法中,小数点的位置是可以浮动的,因此称为浮点表示法。

    浮点数的一般表示形式为:

    一个十进制数N可以写成:N = 10e×M

    一个二进制数N可以写成:N = 2e×M

    其中,M称为浮点数的尾数,是一个纯小数;e是比例因子的指数,称为浮点数的指数,是一个整数。在计算机中表示一个浮点数时,一是要给出尾数M,用小数形式表示;二是要给出指数e,用整数形式表示,常称为阶码。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度;阶码部分指明了小数点在数据中的位置,因而决定了浮点数的表示范围。浮点数也是有符号数,带符号的浮点数的表示如图2-2所示。

    215.gif

    其中,S为尾数的符号位,放在最高一位;E为阶码,紧跟在符号位之后,占m位;M为尾数,放在低位部分,占n位。

    1. 规格化浮点数

    若不对浮点数的表示做出明确规定,同一个浮点数的表示就不是惟一的。例如:

     (1.75)10 = (1.11)2        = 1.11×20

                                          = 0.111×21

                                          = 0.0111×22

                                          = 0.00111×23

    为了提高数据的表示精度,需要充分利用尾数的有效位数。当尾数的值不为0时,尾数域的最高有效位应为1,否则就要用修改阶码同时左右移动小数点的办法,使其变成符合这一要求的表示形式,这称为浮点数的规格化。

    2. IEEE-754标准浮点格式

    在IEEE-754标准出现之前,业界并没有一个统一的浮点数标准,相反,很多计算机制造商都在设计自己的浮点数规则以及运算细节。

    为了便于软件的移植,浮点数的表示格式应该有一个统一的标准。1985年,IEEE(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)提出了IEEE-754标准,并以此作为浮点数表示格式的统一标准。目前,几乎所有的计算机都支持该标准,从而大大改善了科学应用程序的可移植性。

    IEEE标准从逻辑上采用一个三元组{S, E, M}来表示一个数N,它规定基数为2,符号位S用0和1分别表示正和负,尾数M用原码表示,阶码E用移码表示。根据浮点数的规格化方法,尾数域的最高有效位总是1,由此,该标准约定这一位不予存储,而是认为隐藏在小数点的左边,因此,尾数域所表示的值是1.M(实际存储的是M),这样可使尾数的表示范围比实际存储多一位。为了表示指数的正负,阶码E通常采用移码方式来表示,将数据的指数e 加上一个固定的偏移量后作为该数的阶码,这样做既可避免出现正负指数,又可保持数据的原有大小顺序,便于进行比较操作。

    目前,大多数高级语言都按照IEEE-754标准来规定浮点数的存储格式。IEEE-754标准规定,单精度浮点数用4字节(即32位)存储,双精度浮点数用8字节(即64位)存储,如图2-3所示:

    216.gif

    单精度格式(32位):符号位(S)1位;阶码(E)8位,阶码的偏移量为127(7FH);尾数(M)23位,用小数表示,小数点放在尾数域的最前面;

    双精度格式(64位):符号位(S)1位;阶码(E)11位,阶码的偏移量为1023(3FFH);尾数(M)52位,用小数表示,小数点放在尾数域的最前面。

    在IEEE-754标准中,一个规格化的32位浮点数X的真值可表示为:

    X = (-1)s×(1.M)×2 E-127       e = E-127          (式2-9)

    在IEEE-754标准中,一个规格化的64位浮点数X的真值可表示为:

    X = (-1)s×(1.M)×2 E-1023       e = E-1023         (式2-10)

    由于双精度格式的原理与单精度格式相同,仅仅是表示的位数有所增加,所以,下面主要介绍单精度格式(32位)浮点数的表示方法。

    当一个浮点数的尾数为 0,不论其阶码为何值,或者当阶码的值遇到比它所能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。

    当阶码E为全0且尾数M也为全0时,表示的真值X为零,结合符号位S为0或1,有正零和负零之分。当阶码E为全1且尾数M也为全0时,表示的真值X为无穷大(∞),结合符号位S为0或1,有+∞和-∞之分。这样,在32位浮点数表示中,要除去E用全0和全1(255)表示零和无穷大的特殊情况,因此,阶码E的取值范围变为1~254,指数的偏移量不选128(10000000B),而选127(01111111B)。对于32位规格化浮点数,真正的指数值e为-126~+127,因此,数的绝对值的范围是2-126~2127≈10-38~1038


    转载自:http://share.onlinesjtu.com/mod/tab/view.php?id=176

    展开全文
  • 本节书摘来自华章出版社《Core Data...2.6 单精度浮点数与双精度浮点数 对于属性来说,单精度浮点数(float)和双精度浮点数(double)这两种数据类型可以看作带小数点的非整数。它们都可以用来表示实数,但也都有...

    本节书摘来自华章出版社《Core Data应用开发实践指南》一书中的第2章,第2.6节,作者 (美)Tim Roadley,更多章节内容可以访问云栖社区“华章计算机”公众号查看

    2.6 单精度浮点数与双精度浮点数

    对于属性来说,单精度浮点数(float)和双精度浮点数(double)这两种数据类型可以看作带小数点的非整数。它们都可以用来表示实数,但也都有一定的限制。单精度浮点数与双精度浮点数都使用以2为底的数制(也叫二进制),对CPU来说,这是一种原生的数制,它容易引起舍入误差。以1/5这个分数为例,如果采用十进制,那我们可以精确地将其写为0.2,但如果改用二进制,则只能表示出它的近似值。小数点后面的数位越多,精度就越高,表示出来的近似值也就越准确。高精度的数会占用更多内存,以保持其准确性。
    与单精度浮点数相比,双精度浮点数所包含的二进制位(bit)的个数是它的两倍。单精度浮点数用32个二进制位来保存其数据,而双精度浮点数则占用64个二进制位。两者都采用科学计数法,也就是说,整个浮点数是由尾数和指数(表示2的多少次幂)组成的。双精度浮点数有64个二进制位,这意味着它的取值范围比单精度浮点数广,精度也比单精度浮点数高。
    在iOS中,最大的单精度浮点数是340 282 346 638 528 859 811 704 183 484 516 925 440.000 000。单精度浮点数与双精度浮点数都有符号位(sign bit),所以,iOS中数值最小的单精度浮点数是340 282 346 638 528 859 811 704 183 484 516 925 440.000 000,而数值最大的双精度浮点数则比数值最大的单精度浮点数还要大出许多。本章最后有道习题,题中给出了一段代码,可以打印出各种数值数据类型的最小值与最大值。
    在单精度浮点数和双精度浮点数之间取舍时,需要考虑正在配置的这个属性有何特点:它的最小取值和最大取值是多少?是不是真的需要超过7位的精度(单精度浮点数所提供的精度大约是7位)?如果不需要的话,那么在iOS平台上还是应该选用单精度浮点数,因为在64位的iPhone 5S出品之前,单精度浮点数这种数据类型更能够同底层的处理器相匹配。虽说使用一大批双精度浮点数特性看上去有些不太合理,但是要注意:数据库可能会导致程序在存储量方面的需求变得比想象中更大,因为它们可能要包含巨量的数据行。目前设备的能力和容量都很大,所以在大多数情况下,使用双精度浮点数其实也可以。如果追求浮点运算的速度,同时又不太关心精度,那么选用单精度浮点类型会更加合适。但在涉及“元”或“分”等货币单位的财务计算中,则不应该使用单精度浮点数或双精度浮点数,因为“舍入误差”会导致钱数出错!
    根据实体来创建NSManagedObject子类时,如果实体中某个属性的类型为单精度浮点类型或双精度浮点类型,那么在创建好的子类里,相关特性的类型就会是NSNumber。

    2.6.1 小数

    在涉及货币或其他十进制运算的场合中,建议把属性的数据类型设为小数(decimal)。与二进制不同,对于CPU来说,十进制并不是原生的数制,这就意味着以小数来运算时,处理器会有比较大的开销。与单精度浮点数和双精度浮点数一样,小数也是由尾数(该尾数是个整数)、指数及符号组成的。虽说内存占用量和处理时间都比较多,但是小数的计算精度却很高。在这种数制里,0.1这个数就可以精确地表示出来了。如果属性的数据类型是小数,那么它就会把0.1存储为“1/10^1”。
    与值最大的双精度浮点数值相比,值最大的小数其实并不算大,但它的精度却比双精度浮点数高出许多,而且在有些时候甚至是完全准确的。本章最后有道习题,题中给出的那段代码会以1/3这个数为例,打印出每一种“数值数据类型”所能达到的精度。
    根据实体来创建NSManagedObject子类时,如果实体中某个属性的类型是小数类型,那么在创建好的子类里,相关特性的类型就会是NSDecimalNumber。在NSDecimal-Number上面执行计算时要注意:若想保留精度,则只能使用NSDecimalNumber内置的方法。

    2.6.2 字符串

    对于属性来说,字符串这种数据类型可以存放字符数组(array of character)或普通文本(plain old text)。作为Objective-C程序员,你应该已经对字符串相当熟悉了。根据实体来创建NSManagedObject子类时,如果实体中某个属性的数据类型是字符串,那么在创建好的子类里,相关特性的类型就会是NSString。

    2.6.3 Boolean

    对于属性来说,Boolean这种数据类型可用来存放“是”或“否”这两种值。根据实体来创建NSManagedObject子类时,如果实体中某个属性的数据类型是Boolean,那么在创建好的子类中,相关特性的类型就是NSNumber。若想从NSNumber中获取Boolean值,只需向该实例发送boolValue消息即可。而若想将NSNumber设置为某个Boolean值,则可使用numberWithBool方法。

    2.6.4 日期类型

    顾名思义,日期(date)这种数据类型就是用来在属性中保存日期和时间的。根据实体来创建NSManagedObject子类时,如果实体中某个属性的类型是日期类型,那么在创建好的子类中,相关特性的类型就是NSDate。

    2.6.5 二进制数据类型

    如果要保存照片、音频或其他由“0”、“1”二进制位所组成的连续BLOB,那么就应该把属性的类型设为二进制数据类型(Binary Data)。根据实体来创建NSManaged-Object子类时,如果某个属性的类型是二进制数据,那么在创建好的子类中,相关特性的类型就是NSData。至于如何在数据和NSData之间转换,那要依照具体存储的数据来定。二进制数据较常见的用途就是存储照片。存储照片时,可以通过UIImagePNGRepresentation()或UIImageJPEGRepresentation()来把UIImage转换成NSData。而获取照片时,则可以通过UIImage的类方法imageWith-Data把NSData转换为UIImage。二进制数据这种数据类型对于大文件来说比较合适,因为在属性的设置选项中,我们可以开启Allows External Storage,将其“无缝地”存储在数据库之外。启用了这个选项之后,Core Data就会自行判断是把文件存放在数据库内的效率高还是存放到数据库外的效率高。

    2.6.6 可变类型

    可变(Transformable)数据类型很适合用来把Objective-C对象存放到属性里。这种属性类型比较灵活,它可以存放任意类的实例。比方说,UIColor类的实例就可以保存在类型为可变类型的属性里。在根据实体来创建NSManagedObject子类时,如果实体中某个属性的类型是可变类型,那么在创建好的子类中,相关特性的类型就是id。若想把id对象放入存储区(或将其从存储区里取出来),则需借助NSValueTransformer类的实例或NSValueTransformer子类的实例。NSValueTransformer类可以在属性与NSData之间“透明地”执行转换。转换过程也比较简单,尤其当待存储的类本身已经实现了NSCoding协议时更是如此。假如实现了该协议,那么系统就会提供默认的transformer,而这个transformer自己知道如何“压缩”(archive)或“解压缩”(un-archive)相关的对象。
    请按下列步骤修改Grocery Dude,以便配置其中的属性:

    1. 将name 属性的Type设为String。
    2. 将quantity 属性的Type设为Float。
    3. 在Item实体中添加名为photoData的属性,并将其Type设为Binary Data。这个属性用来存放货品照片的图像信息。(注意:目前并不启用Allows External Storage,本书后面再讲解何时启用它。)
    4. 在Item实体中添加名为listed的属性,并将其Type设为Boolean。这个属性用来表示货品是否已出现在购物清单中。
    5. 在Item实体中添加名为collected的属性,并将其Type设为Boolean。如果用户已经拿到了所要购买的货品,那么这个属性就是“真”,这表示该货品已经可以从购物清单中勾掉了。
      执行完上述步骤之后的数据模型如图2-4所示,现在每个属性的数据类型都已经配置好了。

    image

    为了给以后更加复杂的数据模型做准备,笔者在这里告诉你如何切换到图形化的编辑界面。要改变编辑器的显示模式,只需点击图2-5正下方的Editor Style按钮。图2-5左侧演示了编辑器在Graph风格下的样貌。

    image

    展开全文
  • 也被舍去 于是阶码的取值范围变成了[-126,-0]U[+1, 127],合并之后成了[-126, 127] 同样,去掉全0和全1之后,无符号8位2进制的范围由[0, 255] 变成了[1, 254] 由[1, 254] ——> [-126, 127] 便可以得知移码的偏移量...

    前提:以下都是建立在IEEE754标准中

    2^8 = 256
    2^7 = 128
    带符号8位2进制本来应该是[-127, -0]U[+0, 127]

    而该标准规定:

    E = 0000 0000 M = 000…000 用来表示了正、负零
    E = 1111 1111 M = 000…000 用来表示了正、负无穷
    去掉这两个之后,阶码E的其余值: 0000 0001 ~ 1111 1110

    上面的规定意思就是:
    阶码0000 0000到1111 1111这些数中,

    • 全1(1111 1111)=-127,表示了浮点数的无穷,被舍去
    • 全0(0000 0000),即+0,表示了浮点数的0,也被舍去

    于是阶码的取值范围变成了[-126,-0]U[+1, 127],合并之后成了[-126, 127]

    同样,去掉全0和全1之后,无符号8位2进制的范围由[0, 255] 变成了[1, 254]

    由[1, 254] ——> [-126, 127] 便可以得知移码的偏移量为127,当然在理解这句话之前你得先知道移码和偏移量是什么。

    而,在非规范时,E的范围是[0, 255],即0000 0000 ~ 1111 1111


    感谢:知乎回答

    展开全文
  • 浮点数取值范围 ​ 浮点数的取值范围主要看指数部分。 float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。 double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-...
  • C、C++中使用到的单精度浮点数(float)类型和双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存分布、编码规则、取值范围、有效数字位数和...
  • 为什么单精度浮点数的偏置常数用127而不是128 以单精度浮点数为例,双精度同理 首先需要知道为啥需要偏置常数bias,如果不知道,请看后面(https://blog.csdn.net/weixin_43891234/article/details/114692825) ...
  • 单精度浮点数的数学计算

    千次阅读 2020-08-09 01:00:05
    套入单精度-默认空壳中 带入下图的单精度浮点数的空壳中,如上例中,符号位为0,价码为 0b01111111 + (E+1) = 0b10000000 ,尾数为11001。 符号位 价码 尾数 A 【31】 【30:23】 【22:0】 B 【31】 ...
  • 关于浮点数精度取值范围的问题
  • 单精度浮点数在内存中的存储

    千次阅读 2019-01-09 08:22:32
    取值范围看指数部分: float是有符号型,其中,8位指数位,2^8=(-128—127),因此实际的范围是-2^128—2^127,约为-3.4E38—3.4E38 同理double范围约是-1.7E308—1.7E308, 精度是看尾数部分: float尾数位23...
  • num = str(input("输入一个数,显示其浮点数在二进制中的存储,输入exit退出:")) if num=="exit":#此处几个if是float定义的几个量 print("退出运算") break if num=="0":#此处几个if是float定义的几个量 ...
  • 我们知道在C的的头文件“float.h“中...FLT_EPSILON这个表达式来判定两个浮点数是否相等,实际上这个判定只有当1=<|f1|、|f2|<2时才会成立,为什么是这样? 我们知道FLT_EPSILON的定义为1.0+x>1.0,当x...
  • 书上看到一句话【单精度存储大小是32比特即4个字节,其取值范围是-3.4*10^(-38)~3.4*10^38】。 按照我的理解,比特就是二进制位,而32个比特所能含的最大信息量仅仅为2的32次方,所以问题就是:单精度浮点型怎么能...
  • 单精度与双精度浮点数

    千次阅读 2017-01-26 19:24:47
    float是32位,double是64位float32位中,有1位符号位,8位指数位,23位尾数为double64位中,1位符号位,11位指数位,52位尾数位取值范围看指数部分float是有符号型,其中,8位指数位,2^8=(-128—127),因此实际的...
  • 浮点数剖析 以下是该标准对浮点数格式的描述。 [编辑]本文表示比特的约定 把W个比特(bit)的数据,从内存地址低端到高端,以0到W−1编码。通常将内存地址低端的比特写在最右边,称作最低有效位(least significant ...
  • 浮点数范围和有效位对于浮点数,其能表示的数值范围和其有效位如下类型比特位数值范围有效位float32-3.410^38~+3.410^386~7位double64-1.710^-308~1.710^30815~16位long double128-1.210^-4932~1.210^493218~19位...
  • C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配.....
  • Fr anklin C51 的浮点型变量( float ) , 符合IEEE- 754 标准的单精度浮点型数据, 占用四个字节(32 位二进制数) , 具有24 位精度( 二进制) , 在十进制中具有7 位有效数字,许多复杂的数学表达式都采用这种浮点型变量。...
  • 在IEEE754标准中进行了单精度浮点数(float)和双精度数浮点数(double)的定义。float有32bit,double有64bit。它们的构成包括符号位、指数位和尾数位。 这些位的构成如下: 种类-------符号位-------------指数位---...
  • 浮点数范围精度

    千次阅读 2015-07-10 20:42:51
    无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign) : 0代表正,1代表为负指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储尾数部分(Mantissa):尾数部分 1 范围 ...
  • 单双精度浮点数的IEEE标准格式

    千次阅读 2012-09-08 20:24:18
    IEEE-754规定 单精度浮点数用4字节存储,双精度浮点数用8字节存储,表示为三部分:符号位、阶和尾数。 S+E+M S 符号位,尾数的符号位; E 阶,即指数; M 尾数,即有效小数位数; 单精度格式 符号位 1位, bit...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,807
精华内容 8,322
关键字:

单精度浮点数取值范围