单精度与双精度的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单精度与双精度的区别相关的知识,希望对你有一定的参考价值。
单精度与双精度的区别:
1、单精度,也就是 float ,在 32 位机器上用 4 个字节来存储的;而双精度double是用 8 个字节来存储的。
2,单精度和双精度在计算机中的表示格式虽一样,但由于位数存储位不同,他们能表示的数值的范围就不同,也就是能准确表示的数的位数就不同。
拓展资料:
单精度
单精度数是指计算机表达实数近似值的一种方式。VB中Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38 。
双精度浮点数
双精度浮点数(double)是计算机使用的一种数据类型,使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是:2.23x10-308 ~ 1.79x10308。IEEE754为其定制标准。
参考资料:百度百科-单精度百度百科-双精度浮点数
参考技术A单精度与双精度的区别:
1、单精度数是指计算机表达实数近似值的一种方式。单精度,也就是 float ,在 32 位机器上用 4 个字节来存储的;而双精度double是用 8 个字节来存储的,这是他们最本质的区别。
2、由于存储位不同,他们能表示的数值的范围就不同,也就是能准确表示的数的位数就不同。
扩展资料
VB中Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38 。
双精度浮点数(Double)用来表示带有小数部分的实数,一般用于科学计算,用8个字节(64位)存储空间,其数值范围为1.7E-308~1.7E+308,双精度浮点数最多有15或16位十进制有效数字,双精度浮点数的指数用“D”或“d”表示。类型在汉字的意思是指由各特殊的事物或现象抽出来的共通点;在。NET框架中,类型(type)又被称作组件(component).通常情况下,应用程序既包括我们自己创建的类型,也包括微软和其他一些组织创建的类型。
参考技术B单精度数据类型是float,双精度数据类型是double其实最通俗的讲的话,后者所能表示小数的范围比前者大双精度类型的变量能表示15位有效数字,单精度类型变量只能表示7位有效数字双精度类型变量占用8个字宽内存,单精度类型变量占用4个字宽内存。
知识延展:
单精度数,是指计算机表达实数近似值的一种方式。VB中,Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38 。
双精度浮点型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是double float数据类型,C/C++中表示实型变量的一种变量类型。
参考技术C 单精度, float ,存储空间为4 个字节;双精度,double,存储空间为 8 个字节;
这是它们之间最本质的区别。
由于存储空间不同,它们所能表示的数值范围也就不同(能准确表示的数值的位数不同)。
IEEE754标准
单精度(32位)浮点数的结构:
名称 长度 比特位置
符号位 Sign (S) : 1bit (b31)
指数部分Exponent (E) : 8bit (b30-b23)
尾数部分Mantissa (M) : 23bit (b22-b0)
其中的指数部分(E)采用的偏置码(biased)的形式来表示正负指数,若E<127则为负的指数,否则为非负的指数。
另外尾数部分M存储的是当把一个浮点数规范化表示后的1.zozooz...(二进制的)形式的zozooz的部分的比特串,共23位.
求值方法: (-1)^S*(1.M)*2^(E-127)
///////////////////////////////////////////////
双精度(64位)浮点数的结构与单精度相仿
名称 长度 比特位置
符号位 Sign (S) : 1bit (b63)
指数部分Exponent (E) : 11bit (b62-b52)
尾数部分Mantissa (M) : 52bit (b51-b0)
双精度的指数部分(E)采用的偏置码为1023
求值方法:(-1)^S*(1.M)*2^(E-1023) 参考技术D 单精度 占四个字节存储空间 能表示的有效数位为7位
双精度 占八个字节存储空间 能表示的有效数位为16位
最好定义符点数时,都采用double类型。
因为小数在计算机中存储的多数为近似值,虽然符点数的表示方法(IEEE754标准)可以使得四字节或八字节表示很大的数据,但是,由于有的小数不能完全转换成纯粹相等的二进制数,所以,计算机只能保存最接近的其值的二进制小数。如:
0.9 d= 0.1110011001100.... B 按二进制再反算回来可能就是0.89999....了
演算方法:
0.9*2=1.8
0.8*2=1.6
0.6*2=1.2
0.2*2=0.4
0.4*2=0.8
....
精度和规模有啥区别?
【中文标题】精度和规模有啥区别?【英文标题】:What is the difference between precision and scale?精度和规模有什么区别? 【发布时间】:2011-08-07 01:23:10 【问题描述】:Oracle 中的精度和规模有什么区别?在教程中,他们通常将 scale 留空,并在创建主键时将精度设置为 6。
精度和比例代表什么?
【问题讨论】:
【参考方案1】:精度 4,比例 2:99.99
精度 10,刻度 0:9999999999
精度 8,比例 3:99999.999
精度 5,比例 -3:99999000
【讨论】:
你能解释一下负尺度的行为吗? 看起来像四舍五入/忽略了小数点左侧的许多整数值 请记住,精度始终包括比例部分。例如:精度 4,比例 2 - 将失败任何数字 > 99.9999..;尝试:从双重中选择演员(99.99999 as NUMBER(4,2)); //好的;从对偶中选择演员表(100.9 as NUMBER(4,2)); //失败; @JamaDjafarov 99.99999 失败,如下所示:` 21:53:54 CB900@XYZ > 从双重中选择演员表(99.99999 as NUMBER(4,2)); select cast (99.99999 as NUMBER(4,2)) from dual * 第 1 行出现错误:ORA-01438:值大于此列允许的指定精度 21:52:32 CB900@ASCEND1 > 从 v$instance 中选择版本;版本 - - - - - - - - - - - - - - - - - - - - - - - - - -- 12.1.0.2.0 ` @Phalgun select cast(99.9999 as NUMBER(4,2)) from DUAL;是一个不好的例子,因为截断会将数字从 99 向上舍入到 100,这对于 NUMBER(4,2) 来说太大了。尝试从 DUAL 中选择 cast(88.8888 as NUMBER(4,2));而是看到响应是 88.89。【参考方案2】:精度是有效位数。 Oracle 保证数字的可移植性,精度范围为 1 到 38。
Scale 是小数点右侧(正)或左侧(负)的位数 观点。范围可以从 -84 到 127。
在您的情况下,精度为 6 的 ID 意味着它不会接受具有 7 个或更多有效数字的数字。
参考:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
该页面还包含一些示例,可让您了解精度和规模。
【讨论】:
这意味着最后一个bumber将是1000000? +1:我认为理解这一点的关键是理解内部数字格式——尾数和指数。精度限制了尾数的可能长度,而比例限制了可能的最小指数。 @DavidAldridge 我回应你。我认为您应该考虑将其发布为关于尾数和指数的答案。数字实际上是以可变长度格式存储的。 CHAR 数据类型的精度如何?【参考方案3】:Precision是总位数,可以在1到38之间。Scale是小数点后的位数,也可以设置舍入为负数。
示例: 号码(7,5):12.12345 号码(5,0):12345
更多详情请访问 ORACLE 网站:https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
【讨论】:
而Scale是小数点右边(正)或左边(负)的位数,而不是小数点后的位数。 看看 koljaTM 的例子。精度是多少个有效数字,它可能有一个值(即,不仅仅是“0”作为占位符)。比例表示那些相对于小数点的下降方式。 Scale 可以为负数,表示您不关心的高于 0 的精度。 NUMBER(1,-4):只允许 10 个值:00000、10000、20000...90000 精度不仅仅是总位数。正如大卫奥尔德里奇在他对 manojlds 的评论中解释的那样,它是尾数 - 你关心多少有效数字。被认为是指数的比例是一种更准确但深奥的解释。任何负数刻度在小数点后都没有数字,并且在小数点左侧有那么多的 0 作为占位符。 NUMBER(1,-4) 将有 5 位数字,但只有第一个,在 10,000 位中会有一个您关心的值。【参考方案4】:也许更清楚:
注意精度是总位数,包括小数位
NUMBER(精度、比例)
8 级精度,3 级:87654.321
精度 5,比例 3:54.321
精度 5,比例 1:5432.1
精度 5,刻度 0:54321
精度 5,比例 -1:54320
精度 5,比例 -3:54000
【讨论】:
【参考方案5】:比例是小数点后的位数(或冒号,取决于您的语言环境)
精度是有效位数的总数
【讨论】:
【参考方案6】:precision:它是小数点之前或之后的总位数。 例如:123.456 这里的精度是 6。
Scale:小数点后的总位数。 例如:123.456 这里是 Scaleis 3
【讨论】:
【参考方案7】:如果值为 9999.988 且精度为 4,刻度为 2,则表示 9999(表示精度).99(刻度为 2,因此 .988 舍入为 .99)
如果值为 9999.9887,精度为 4,比例为 2,则表示 9999.99
【讨论】:
不,精度是要存储的有效位数。在这两种情况下,存储的精度都是 6,比例是 2。以上是关于单精度与双精度的区别的主要内容,如果未能解决你的问题,请参考以下文章