单精度与双精度的区别

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。

以上是关于单精度与双精度的区别的主要内容,如果未能解决你的问题,请参考以下文章

单精度与双精度

逗号与双精度点与访问数据库

什么叫单精度浮点型?什么叫双精度浮点型?

为啥中位数跳闸 data.table (整数与双精度)?

精度和规模有啥区别?

float和double的区别 float和double5点区别