Java Math 类中的新功能,第 1 部分: 实数 - 编程入门网
((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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |