Float中的那些常量 Infinity、NaN

在 Java 计算中,肯定会使用各种基本数据类型,进行加减乘除等操作。但是假如哪一天,你发现一个函数给你返回了一个float结果,你打印出来后却发现不是小数,而是InfinityNaN这种东西,你可能就一脸黑人问号了。
这两个值确实是 Java 提供的数值,一个返回float的函数给你返回这两个值也是没有任何问题的。那这两个值各代表什么意义呢,下面给出答案:

无穷大 Infinity

Float类中,有两个静态常量:

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

这两个常量一个表示正无穷,一个表示负无穷。在计算上,有一点一定要特别注意:

无穷大加上一个数还是无穷大

double infinity = 1.0 / 0;                  
System.out.println(infinity);             //Infinity  
System.out.println(infinity + 1);         //Infinity  
System.out.println(infinity == i + 1);    //true  

如果你要初始化一个数为无穷大,那么可以用任何被计算为无穷大的浮点算术表达式来初始化,或者使用Float提供的常量:

float infinity = 1.0 / 0.0;
float infinity  = Float.POSITIVE_INFINITY;

不是数字的数 NaN

NaN,not a number,对于所有没有良好的数字定义的浮点计算,如0.0/0.0,结果都是NaN。在Float类中,提供了一个常量来表示NaN:

public static final float NaN = 0.0f / 0.0f;

初始化一个数字为NaN,可以像Float一样用任何计算结果为NaN 的浮点算术表达式或直接用Float提供的这个常量:

float nan= 0.0 / 0.0;
float nan  = Float.NaN ;

NaN 有一些奇葩的性质,在计算时需要特别注意:

  1. NaN 不等于任何浮点数值,包括它自身在内;即它与任何数比较均返回false。
  1. 任何浮点操作,只要它的一个或多个操作数为NaN,那么其结果为NaN。

虽然NaN与任何数比较均返回false,但是使用Float.compare()这个方法来比较两个NaN时,却会得到相等的结果。如下:

float nan = 0.0 / 0;  
System.out.println(nan);             //NaN  
System.out.println(nan + 1);         //NaN  
System.out.println(nan == nan + 1);    //false  
float anan = 0.0 / 0;
System.out.println(Float.compare(nan,anan));    //true

Float 中的其他常量:

上面介绍了Float类中的3个常量,这3个是需要特别注意的,其他Float还有其他的常量,只是不常用而已。下面就对Float中的常量做一下总结:

  1. float POSITIVE_INFINITY = 1.0f / 0.0f;正无穷大
  2. float NEGATIVE_INFINITY = -1.0f / 0.0f;负无穷大
  3. float NaN = 0.0f / 0.0f;表示不是一个数字
  4. float MAX_VALUE = 0x1.fffffeP+127f; float能表示的最大正值:3.4028235e+38f
  5. float MIN_NORMAL = 0x1.0p-126f; 1.17549435E-38f
  6. float MIN_VALUE = 0x0.000002P-126f; float能表示的最小正值 1.4e-45f
  7. final int MAX_EXPONENT = 127; 一个有限float数值的最大指数值
  8. final int MIN_EXPONENT = -126; 一个有限float数值的最小指数值
  9. final int SIZE = 32; 一个float类型数值占用的比特数
  10. final int BYTES = SIZE / Byte.SIZE; 一个float类型数值占用的字节数

另外,在 Java 提供的另一个浮点类Double类中,也存在相同意义的常量,只是值不同而已。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 在编程中我们总要进行一些数学运算以及数字处理,尤其是浮点数的运算和处理,这篇文章主要介绍C语言下的数学库。而其他语...
    欧阳大哥2013阅读 5,063评论 0 12
  • Java关键字的大致含义 关键字 含义 表明类或者成员方法具有抽象属性 abstract 用来进行程序调试 ass...
    残月雨纷纷阅读 363评论 0 0
  • 什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script...
    oWSQo阅读 1,785评论 0 1
  • 变量 声明变量 命名变量区分大小写的语言第一个字符是字母或下划线_,数字不能作为第一个字符字符必须是字母,数字或者...
    flyingtoparis阅读 789评论 0 0
  • 文 | 阿卷 公众号 | 卷卷花园 (原文标题:活在当下还是活在未来?) 1. 晚上七点多,终于选好一条leggi...
    卷卷花园阅读 296评论 3 1