免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1631 | 回复: 0
打印 上一主题 下一主题

java浮点数分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-02 11:35 |只看该作者 |倒序浏览

                                                                java的浮点数管理是分成
float,double两套进行的。
其中float是32位的,double是64位的,那么具体的存储方式是怎么样的呢?
按JAVA的语言规范,是下面这种方式的。
有限值可以用下面的公式来表示
s · m · 2 (e-N+1)
其中S是,+1,-1
m是正整数小于2N
而e是个整数,值域是Emin = -(2K-1-2) 到 Emax = 2K-1-1
而N与K的值呢,是取决于具体的实现的。
而对于有些实现对应的有些数值,这个s,m,e是可以取不同的值的。
如m是偶数,那么m就可以取m/2,而相应的e变成e+1就可以了。
在这种表示形式下,如果m取值可以在如下范围:
m

2(N-1)
就称其为normalized ,否则就是denormalized。
JAVA语言呢是采用下面的参数的。
Parameter
float
float-extended-exponent
double
double-extended-exponent
N
24
24
53
53
K
8


11
11


15
Emax
+127


+1023
+1023


+16383
Emin
-126

-1022
-1022

-16382
这样的实现中,数值就有如下几种:
+0,-0,正数,负数与NaN(非法数)
其中NaN在float与double中都是分别定义的,在实际中是用来表示非法的数值操作结果如除零。
而且对于NaN相关的比较操作除了“!=”外,全是返回false.
也就是1 NaN&& 1== NaN肯定是个false,有意思吧。
下边是JAVA语法规范中的例子。
class Test {
        public static void main(String[] args) {
                // An example of overflow:
                double d = 1e308;
                System.out.print("overflow produces infinity: ");
                System.out.println(d + "*10==" + d*10);
                // An example of gradual underflow:
                d = 1e-305 * Math.PI;
                System.out.print("gradual underflow: " + d + "\n      ");
                for (int i = 0; i
produces the output:
overflow produces infinity: 1.0e+308*10==Infinity
gradual underflow: 3.141592653589793E-305
        3.1415926535898E-310 3.141592653E-315 3.142E-320 0.0
0.0/0.0 is Not-a-Number: NaN
inexact results with float: 0 41 47 55 61 82 83 94 97
inexact results with double: 0 49 98
cast to int rounds toward 0: 12345 -12345
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/55705/showart_1848540.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP