快速业务通道

Java Math 类中的新功能,第 1 部分: 实数 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
((hb^0x7ff00000)|__LO(b))==0) w = b;         return w;       }       /* scale a and b by 2**-600 */       ha -= 0x25800000; hb -= 0x25800000;    k += 600;       __HI(a) = ha;       __HI(b) = hb;     }     if(hb < 0x20b00000) {    /* b < 2**-500 */       if(hb <= 0x000fffff) {    /* subnormal b or 0 */         if((hb|(__LO(b)))==0) return a;         t1=0;         __HI(t1) = 0x7fd00000;    /* t1=2^1022 */         b *= t1;         a *= t1;         k -= 1022;       } else {       /* scale a and b by 2^600 */         ha += 0x25800000;    /* a *= 2^600 */         hb += 0x25800000;    /* b *= 2^600 */         k -= 600;          __HI(a) = ha;          __HI(b) = hb;       }     }    /* medium size a and b */     w = a-b;     if (w>b) {       t1 = 0;       __HI(t1) = ha;       t2 = a-t1;       w = sqrt(t1*t1-(b*(-b)-t2*(a+t1)));     } else {       a = a+a;       y1 = 0;       __HI(y1) = hb;       y2 = b - y1;       t1 = 0;       __HI(t1) = ha+0x00100000;       t2 = a - t1;       w = sqrt(t1*y1-(w*(-w)-(t1*y2+t2*b)));     }     if(k!=0) {       t1 = 1.0;       __HI(t1) += (k<<20);       return t1*w;     } else return w; }

Java Math 类中的新功能,第 1 部分: 实数(4)

时间:2011-04-30 IBM Elliotte Rusty Harol

实际上,是使用这种特定函数,还是几个其他类似函数中的一个取决于平台上的 JVM 细 节。不过,这种代码很有可能在 Sun 的标准 JDK 中调用。(其他 JDK 实现可以在必要时改 进它。)

这段代码(以及 Sun Java 开发库中的大多数其他本机数学代码)来自 Sun 约 15 年前 编写的开源 fdlibm 库。该库用于精确实现 IEE754 浮点数,能进行非常准确的计算,不过 会牺牲一些性能。

以 10 为底的对数

对数说明一个底数的几次幂等于一个给定的值。也就是说,它是 Math.pow() 函数的反函 数。以 10 为底的对数一般出现在工程应用程序中。以 e为底的对数(自然对数)出现在复 合计算以及大量科学和数学应用程序中。以 2 为底的对数一般出现在算法分析中。

从 Java 1.0 开始,Math 类有了一个自然对数。也就是给定一个参数 x,该自然对数返 回 e 的几次幂等于给定的值 x。遗憾的是,Java 语言的(以及 C 、Fortran 和 Basic 的 )自然对数函数错误命名为 log()。在我读的每本数学教材中,log 都是以 10 为底的对数 ,而 ln 是以 e 为底的对数,lg 是以 2 为底的对数。现在已经来不及修复这个问题了,不 过 Java 5 添加了一个 log10() 函数,它是以 10 为底而不是以 e 为底的对数。

清单 3 是一个简单程序,它输出整数 1 到 100 的以 2、10 和 e 为底的对数:

清单 3. 1 到 100 的各种底数的对数

public static void main(String[] args) {        for (int i = 1; i <= 100; i++) {            System.out.println(i + "\t" +                              Math.log10(i) + "\t" +                              Math.log(i) + "\t"  +                              lg(i));        }    }    public static double lg(double x) {        return Math.log(x)/Math.log(2.0);    }}

下面

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号