单精度和双精度问题

一,什么是单精度和双精度

单精度数(float)是指计算机表达实数近似值的一种方式。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为其定制标准。

扩展:
单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(float),顾名思义是通过浮动小数点来实现数据的存储。
这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。
但是与此同时,他也完全符合科学计算中对于数值的观念:当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。
但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。
从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。
这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。

二,单精度和双精度有什么区别

1、单精度和双精度的字节数不同。前者占4个字节;后者占8个字节。

单精度是这样的格式,1位符号,8位指数,23位小数。单精度表示格式

双精度是1位符号,11位指数,52位小数。
双精度表示格式

2、单精度和双精度有效数字位数不同。前者为8位;后者为16位。

3、单精度和双精度表示的数的范围不同。前者的数值范围在-3.40E+38 到 +3.40E+38之间;后者的范围为-1.79E+308到+1.79E+308之间。

4、单精度和双精度处理的速度不同。前者的速度更加的快。

面试题:

1.java中3*0.1==0.3将会返回什么?true还是false?

fale,因为浮点数不能完全精确的表示出来,一般会损失精度。

2.java中float f = 3.4;是否正确?

不正确,3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型会造成精度损失,因此需要强制类型转换float
f = (float)3.4;或者写成 float f = 3.4f;才可以。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页