Java Math 类中的新功能,第 1 部分: 实数 - 编程入门网
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 部分: 实数(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 实现
首先,这个方法会将所有负 0 转换为正 0。(负 0 可能不好理解,但它确实是 IEEE 754 规范的必要组成部分)。其次,它会认为 NaN 是正的。实际实现如清单 7 所示,它更 加复杂,而且会仔细处理这些特殊情况: 清单 7. 实际的、正确的 Math.signum 实现
事半功倍 最有效的代码是从您未编写过的代码。不要做专家们已经做过的事情。使用 java.lang.Math 函数(新的和旧的)的代码将更快、更有效,而且比您自己编写的任何代码 都准确。所以请使用这些函数。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |