快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
lt;= MAX_X; x += 0.1) {        double y = Math.cosh(x);        int scaledX = (int) (x * WIDTH/(MAX_X - MIN_X) + WIDTH/2.0);        int scaledY = (int) (y * HEIGHT/MAX_Y);        // in computer graphics, y extends down rather than up as in        // Caretesian coordinates'' so we have to flip        scaledY = HEIGHT - scaledY;        catenary.addPoint(scaledX, scaledY);      }    }    public static void main(String[] args) {      Frame f = new Catenary("Catenary");      f.setVisible(true);    }    public void paint(Graphics g) {      g.drawPolygon(catenary);    } }

图 1 为绘制的曲线:

图 1. 笛卡尔平面中的一条悬链曲线

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

双曲正弦、双曲余弦和双曲正切函数也会以常见或特殊形式出现在各种计算中。

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

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

符号

Math.signum 函数将正数转换为 1.0,将负数转换为 -1.0,0 仍然是 0。 实际上,它只 是提取一个数的符号。在实现 Comparable 接口时,这很有用。

一个 float 和一个 double 版本可用来维护这种类型 。这个函数的用途很明显,即处理 浮点运算、NaN 以及正 0 和负 0 的特殊情况。NaN 也被当作 0,正 0 和负 0 应该返回正 0 和 负 0。例如,假设如清单 6 那样用简单的原始方法实现这个函数:

清单 6. 存在问题的 Math.signum 实现

public static double signum(double x) {   if (x == 0.0) return 0;   else if (x < 0.0) return -1.0;   else return 1.0; }

首先,这个方法会将所有负 0 转换为正 0。(负 0 可能不好理解,但它确实是 IEEE 754 规范的必要组成部分)。其次,它会认为 NaN 是正的。实际实现如清单 7 所示,它更 加复杂,而且会仔细处理这些特殊情况:

清单 7. 实际的、正确的 Math.signum 实现

public static double signum(double d) {    return (d == 0.0 || isNaN(d))?d:copySign(1.0, d); } public static double copySign(double magnitude, double sign) {    return rawCopySign(magnitude, (isNaN(sign)?1.0d:sign)); } public static double rawCopySign(double magnitude, double sign) {    return Double.longBitsToDouble((Double.doubleToRawLongBits(sign) &                   (DoubleConsts.SIGN_BIT_MASK)) |                   (Double.doubleToRawLongBits(magnitude) &                   (DoubleConsts.EXP_BIT_MASK |                    DoubleConsts.SIGNIF_BIT_MASK))); }

事半功倍

最有效的代码是从您未编写过的代码。不要做专家们已经做过的事情。使用 java.lang.Math 函数(新的和旧的)的代码将更快、更有效,而且比您自己编写的任何代码 都准确。所以请使用这些函数。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号