文档章节

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
博文 412
码字总数 197400
作品 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 作为一个前端小白,入门跟着这几个来源学...

请叫我大苏
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

没有更多内容

加载失败,请刷新页面

加载更多

MySQL主从配置——双主

MySQL主从配置——双主 本人是测试环境,准备了两台安装好mysql的服务器(masterA和masterB),可以保证没数据写入,否则需要先将两台服务器上的数据一致,然后再进行主从配置,步骤是:先m...

弓正
13分钟前
6
0
centos下如何使用 beyond compare 对比工具

我这里的环境是centos7桌面版 三条命令安装beyond compare wget http://www.scootersoftware.com/bcompare-4.2.3.22587.x86_64.rpmrpm --import http://www.scootersoftware.com/RPM-GPG-K......

linuxprobe16
17分钟前
4
0
http协议请求头的意义

GET /day31_Http_306/index.jsp HTTP/1.1: GET请求,请求服务器路径为/hello/index.jsp,协议为1.1 请求头 1.Host:localhost:请求的主机名为localhost2.User-Agent:Mozilla/5.0(Windows NT......

潇潇程序缘
55分钟前
9
0
Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
今天
13
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部