首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Double.POSITIVE_INFINITY == Float.POSITIVE_INFINITY

Double.POSITIVE_INFINITY == Float.POSITIVE_INFINITY
EN

Stack Overflow用户
提问于 2012-04-10 13:10:21
回答 4查看 4.3K关注 0票数 9

我试过了

代码语言:javascript
复制
System.out.println(Double.isInfinite(Float.POSITIVE_INFINITY))
System.out.println(Double.isInfinite(Float.NEGATIVE_INFINITY));

输出结果是

代码语言:javascript
复制
true
true

所以这意味着"Infinity“对于这两种数据类型是相同的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-10 13:13:13

是也不是。是的,因为从抽象意义上讲,无穷大就是无穷大(而且,正如我在下面解释的那样,对于大多数代码来说,浮点数无论如何都会转换为双精度)。

不,但是,因为在位级别,这两个无穷大是不同的。double在Java中是64位,而float在Java中是32位,所以它们在表示级别上是不同的。

在Java语言中,浮点数(浮点数和双精度数)是使用IEEE 754浮点格式表示的,这是当今几乎每个人都在使用的标准。每个数字都以二进制形式表示为符号位,加上一定数量的指数位,再加上一定数量的尾数(有效数)位。在浮点数或双精度数中,正无穷大用符号位0、指数位全1和尾数位全0来表示。负无穷大的表示方式是相同的,除了符号位是1。因此,无穷大有两种非常相似的表示方式,但由于浮点数和双精度数之间的指数和尾数位计数不同,位级模式也不同。

出于编写代码的目的,您可以将它们视为相同的。当您同时使用双精度和浮点数时,除非您明确说明,否则浮点数将自动转换为双精度型,并且表达式将导致双精度型,因此,在大多数实际用途中,浮点型无穷大“就像”双精度无穷大。

票数 7
EN

Stack Overflow用户

发布于 2012-04-10 13:13:20

这取决于你所说的“相同”是什么意思。位模式是不同的,因为符号不同,但它们仍然是无穷大的。

此外,当转换为双精度时,浮点数的提升规则将保留无限的性质。

票数 1
EN

Stack Overflow用户

发布于 2012-04-10 14:35:17

在Java语言中,您不能直接将doublefloat进行比较。相反,当您尝试这样做时,float首先会自动转换为double。当你向一个接受double参数的方法传递一个float时,同样的事情也会发生。当您将Float.POSITIVE_INFINITY (例如)转换为double时,您将获得Double.POSITIVE_INFINITY

所以你的问题的答案是,Double.POSITIVE_INFINITYFloat.POSITIVE_INFINITY并不完全是一回事,但它们都表示“一个太大而无法表示的数字”,因此==给出的答案在逻辑上是一致的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10083370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档