我试过了
System.out.println(Double.isInfinite(Float.POSITIVE_INFINITY))
System.out.println(Double.isInfinite(Float.NEGATIVE_INFINITY));输出结果是
true
true所以这意味着"Infinity“对于这两种数据类型是相同的吗?
发布于 2012-04-10 13:13:13
是也不是。是的,因为从抽象意义上讲,无穷大就是无穷大(而且,正如我在下面解释的那样,对于大多数代码来说,浮点数无论如何都会转换为双精度)。
不,但是,因为在位级别,这两个无穷大是不同的。double在Java中是64位,而float在Java中是32位,所以它们在表示级别上是不同的。
在Java语言中,浮点数(浮点数和双精度数)是使用IEEE 754浮点格式表示的,这是当今几乎每个人都在使用的标准。每个数字都以二进制形式表示为符号位,加上一定数量的指数位,再加上一定数量的尾数(有效数)位。在浮点数或双精度数中,正无穷大用符号位0、指数位全1和尾数位全0来表示。负无穷大的表示方式是相同的,除了符号位是1。因此,无穷大有两种非常相似的表示方式,但由于浮点数和双精度数之间的指数和尾数位计数不同,位级模式也不同。
出于编写代码的目的,您可以将它们视为相同的。当您同时使用双精度和浮点数时,除非您明确说明,否则浮点数将自动转换为双精度型,并且表达式将导致双精度型,因此,在大多数实际用途中,浮点型无穷大“就像”双精度无穷大。
发布于 2012-04-10 13:13:20
这取决于你所说的“相同”是什么意思。位模式是不同的,因为符号不同,但它们仍然是无穷大的。
此外,当转换为双精度时,浮点数的提升规则将保留无限的性质。
发布于 2012-04-10 14:35:17
在Java语言中,您不能直接将double与float进行比较。相反,当您尝试这样做时,float首先会自动转换为double。当你向一个接受double参数的方法传递一个float时,同样的事情也会发生。当您将Float.POSITIVE_INFINITY (例如)转换为double时,您将获得Double.POSITIVE_INFINITY。
所以你的问题的答案是,Double.POSITIVE_INFINITY和Float.POSITIVE_INFINITY并不完全是一回事,但它们都表示“一个太大而无法表示的数字”,因此==给出的答案在逻辑上是一致的。
https://stackoverflow.com/questions/10083370
复制相似问题