文档章节

java中的NAN和INFINITY

丁佳辉
 丁佳辉
发布于 2017/02/07 10:41
字数 446
阅读 14
收藏 0

java浮点数运算中有两个特殊的情况:NAN、INFINITY。

1、INFINITY:

在浮点数运算时,有时我们会遇到除数为0的情况,那java是如何解决的呢?

我们知道,在整型运算中,除数是不能为0的,否则直接运行异常。但是在浮点数运算中,引入了无限这个概念,我们来看一下Double和Float中的定义。

Double:

public static final double POSITIVE_INFINITY = 1.0 / 0.0;

public static final double NEGATIVE_INFINITY = -1.0 / 0.0;

 

Float:

public static final float POSITIVE_INFINITY = 1.0f / 0.0f;

public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;

 

那么这些值对运算会有什么影响呢?

我们先思考一下下面几个问题:

Float和Double中的无限有什么区别?

无限乘以0会是什么?

0除以0又会有什么结果?

 

再来看下面的示例:

复制代码

public static void main(String[] args) {

         float fPos=Float.POSITIVE_INFINITY;
         float fNeg=Float.NEGATIVE_INFINITY;
         double dPos=Double.POSITIVE_INFINITY;
         double dNeg=Double.NEGATIVE_INFINITY;
         
         //t1
         System.out.println(fPos==dPos);  //output: true
         System.out.println(fNeg==dNeg);  //output: true
         
         //t2
         System.out.println(fPos*0);  //output: NAN
         System.out.println(fNeg*0);  //output: NAN
         
         //t3
         System.out.println(fPos==(fPos+10000));  //output: true
         System.out.println(fPos==(fPos*10000));  //output: true
         System.out.println(fPos==(fPos/0));  //output: true

         //t4
         System.out.println(Double.isInfinite(dPos));  //output: true
         
    }

复制代码

从上面几组测试中我们可得出一些结论:

t1: Float中的无限和Double中的无限是相等的。

t2: 无限乘以0得到的值为NAN,即非数字。

t3: 除了乘以0外,对无限值做运算所得的值还是无限

要判断一个浮点数是否为INFINITY,可用t4中所示的isInfinite方法。

2、NAN

java中的NAN是这么定义的:

public static final double NaN = 0.0d / 0.0;

NAN表示非数字,它与任何值都不相等,甚至不等于它自己,所以要判断一个数是否为NAN要用isNAN方法:

public static void main(String[] args) {
        double nan=Double.NaN;
        System.out.println(nan==nan);  //output: false
        System.out.println(Double.isNaN(nan));  //output: true
}

© 著作权归作者所有

共有 人打赏支持
丁佳辉
粉丝 20
博文 434
码字总数 198765
作品 0
浦东
程序员
私信 提问
AS3 基本数据类型 primitive data type

int(带符号,32位整型,-2147483648~2147483647), uint(无符号,32位整型,0~2147483647), Number(64位,双精度浮点型,-1.79e+308~-5e-324,0,5e-324~1.79e+308), String(UTF-16,Unicode), Boolea......

smilethat
2012/03/05
0
0
前端入门8-JavaScript语法之数据类型和变量

声明 本系列文章内容全部梳理自以下几个来源: 《JavaScript权威指南》 MDN web docs Github:smyhvae/web Github:goddyZhao/Translation/JavaScript 作为一个前端小白,入门跟着这几个来源学...

请叫我大苏
2018/12/02
0
0
书薄记--JavaSctipt高级程序设计章三(基本概念)

语法 区分大小写 标识符:以 字母, ,$开头,其它字符可以是字母,,美元符号或数字。 命名方式:推荐驼峰大小写方式。 注释:// 单行 / 多行 / 语句:类C 关键字: break else new var c...

大东哥
2011/09/25
0
1
JRuby 1.7.14 发布, Java 版的 Ruby 解释器

JRuby 1.7.14 发布,此版本现已提供下载: http://www.jruby.org/download JRuby 1.7 主要是为了兼容 Ruby 1.9.3 版本,改进记录如下: 解决了 30 个 issues 修复了 Jar 文件源潜在的内存泄漏...

oschina
2014/08/28
1K
7
How can I initialize a double variable to infinity

Q. How can I initialize a double variable to infinity? A. Java has built-in constants available for this purpose: Double.POSITIVEINFINITY and Double.NEGATIVEINFINITY. Q. Can you......

Oscarfff
2015/06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式事务解决方案框架(LCN)

什么是XA接口 XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口...

群星纪元
11分钟前
0
0
linux 操作系统 常用命令和软件安装

1.系统时间更新 ntpdate time.windows.com 2.传送文件 rsync -av /home/data/a.dat -e ssh root@192.168.0.100:/home 3.传送文件夹 scp -r /home/data root@192.168.0.100:/home 4.JDK安装 ......

WJtiny
33分钟前
0
0
pg_lightool基于basebackup的单表恢复和块恢复

开源软件pg_lightool,实现了基于wal日志的块恢复。详情参见博客:https://my.oschina.net/lcc1990/blog/1931485。由于wal日志中FPW的不确定性,它不能作为一个数据库恢复的解决方案。目前对...

movead
41分钟前
2
0
对比剖析Swarm Kubernetes Marathon编排引擎

Docker Native Orchestration 基本结构 Docker Engine 1.12 集成了原生的编排引擎,用以替换了之前独立的Docker Swarm项目。Docker原生集群(Swarm)同时包括了(Docker Engine \/ Daemons)...

Linux就该这么学
42分钟前
2
0
Mybatis的结果集处理

此时我们已经可以把整段的SQL语句取出,但还并没有在数据库中去执行,我们可以先来分析一下配置文件中SQL语句执行后的结果集是如何处理的。 Mybatis会将结果集按照映射配置文件中定义的映射规...

算法之名
55分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部