转自http://blog.csdn.net/seizef/article/details/5571783#ref_1,有删改。

先简单介绍一下浮点数在计算机中的组成,在Java中采用的浮点数表示法是IEEE754标准。

任意一个二进制浮点数V可以表示成下面的形式,进一步说明请参照[1]:

  

(1)(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。

  (2)M表示尾数,范围是[1,2)(规格化)或者是[0,1)(非规范化)。

  (3)2^E表示阶码。

当用浮点数来表示整数时,我们要得到连续的整数分布,肯定希望尾数的精度越高越好。显然,尾数的位数限制了能表示的最大的整数的值。对于一个浮点数,设p为其尾数的有效位数,那么最大的尾数就是1 + 1 - 2^(-p),所以最大的整数为(2-2^(-p)) * 2^(p) = 2^(p+1) - 1。由于浮点数是有符号的,所以很自然的我们想到整数范围为[-2^(p+1) – 1, 2^(p+1) – 1]。可是我们还遗漏了2个数,就是2^(p+1)和-2^(p+1)。我们来看这两个整数的浮点数表示。规格化后,2^(p+1) = (1.0000…000) * 2^(p+1),其中尾数部分小数点后有p+1个0。但是我们知道,我们的尾数最多只能存储p个0,,但是很巧,由于被舍去的最后一个数字是0,所以不影响实际取值,所以2^(p+1)就可以精确表示了。同理-2^(p+1)也是如此。

注意,可能有读者会想到,既然1.00..000*2^(p+1)可以精确表示,那么很显然,对于单精度浮点数p=23,而指数的可表示范围-126~+127,那么为什么2^(p+1)就是可以表示的最大整数呢。因为我们文章的标题是连续精确表示整数的范围。2^(p+1),2^(p+2),2^(p+3)都可以精确表示,但是[2^(p+1), 2^(p+2)]之间还有许多数就无法表示了,因为尾数不够。

所以对于IEEE754 单精度和双精度浮点数,能够精确表示的整数的范围为

Floating Point Range
float [-2^24,2^24]
double [-2^53,2^53]

[1]http://www.cnblogs.com/BJUT-2010/p/5551008.html

Java中浮点数能连续精确表示整数的范围的更多相关文章

  1. java中浮点数的比较(double, float)(转)

    问题的提出:如果我们编译运行下面这个程序会看到什么? public static void main(String args[]){ System.out.println(0.05+0.01); Sy ...

  2. 计算价格, java中浮点数精度丢失的解决方案

    计算价格, java中浮点数精度丢失的解决方案

  3. JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用

    Java 中无锁的线程安全整数 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候, 不可避免的会用到synchron ...

  4. Java 中浮点数---------BigDecimal和double(初探)

    为什么要使用 bigdecimal? 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了 ...

  5. java第二周的学习知识4(对原码,补码,反码和java中浮点数计算不准确的总结)

    原码:一个正数,转换为二进制位就是这个正数的原码.负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码. 但是原码有几个缺点,零分两种 +0 和 -0 .很奇怪是吧!还有,在进行不同符号的加法运 ...

  6. Java中浮点数的精度问题 【转】

    当您在计算Money的时候,请看好了!!!要不损失了别后悔!!! 现象1: public static void main(String[] args) { System.out.println(0. ...

  7. Java中浮点数的坑

    基本数据类型 浮点数存在误差 浮点数有一个需要特别注意的点就是浮点数是有误差的,比如以下这段代码你觉得输出的什么结果: public class Demo { public static void m ...

  8. Java中浮点数的基础知识

    偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...

  9. JAVA中浮点数显示

    //Java小数点后留两位 double num1 =11; double num2 =21; String num3 =""; //函数可以确定十进制数的显示格式:百分数,限定小 ...

随机推荐

  1. 【CSS系列-选择器优先级总结】

    转:http://www.cnblogs.com/dolphinX/p/3511300.html 容易被忽略CSS特性   CSS初学感觉很简单,但随着学习的深入才感觉CSS的水由多深,平常总会遇到各 ...

  2. CPU 100%

    http://www.cnblogs.com/xuehong1985/articles/757060.html

  3. 网络IPC:套接字之数据传输

    既然将套接字端点表示为文件描述符,那么只要建立连接,就可以使用read和write来通过套接字通信.通过在connect函数里设置对方地址,数据报套接字也可以“连接”.在套接字描述符上采用read和w ...

  4. 关于BP算法在DNN中本质问题的几点随笔 [原创 by 白明] 微信号matthew-bai

       随着deep learning的火爆,神经网络(NN)被大家广泛研究使用.但是大部分RD对BP在NN中本质不甚清楚,对于为什这么使用以及国外大牛们是什么原因会想到用dropout/sigmoid ...

  5. Debian中编译内核

    转载: http://blog.163.com/libo_5/blog/static/156968520101016102051580/ http://hi.baidu.com/wg_wang/ite ...

  6. solr查询字段为空值,删除字段空值的方法

    1. 例,我想查找内容字段content为空值的文档,看看文档有多少?执行如下查询. http://127.0.0.1:11100/solr/province/select?q=-(content:* ...

  7. 自己调用NTDLL函数

    一.概述 在DLL初始化的时候有时不能调用其它系统DLL的函数,以免导致问题,但有时候又必须要调用怎么办?一种办法就是自己直接调用NTDLL接口,这样肯定没有问题. 下面我写个自己调用Registry ...

  8. 【Android 界面效果22】Android的Tab与TabHost

    Tab与TabHost 这就是Tab,而盛放Tab的容器就是TabHost 如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了.一个Activity,对应了多个功能布局. ①新建一个Tab项 ...

  9. web前端开发(6)

    为了避免全局变量泛滥导致冲突,最简单有效的办法是用匿名函数将脚本包起来,让变量的作用域控制在函数之内.

  10. Hessian矩阵

    http://baike.baidu.com/link?url=o1ts6Eirjn5mHQCZUHGykiI8tDIdtHHOe6IDXagtcvF9ncOfdDOzT8tmFj41_DEsiUCr ...