java中何时使用StrictMath的数学函数?
2014-05-03 23:51
417 查看
简单的介绍下Math类和StrictMath类,一般的数学计算中,需要调用已经封装好的Math类;
1、比如,我们时常用到的平方根函数,数学函数类的官方说明;
double java.lang.Math.sqrt(double a)
Returns the correctly rounded positive square root of a
If the argument is NaN or less than zero, then the result is NaN.
If the argument is positive infinity, then the result is positive infinity.
If the argument is positive zero or negative zero, then the result is the same as the argument.
Otherwise, the result is the
Parameters:a a value.Returns:the positive square root of
分析;Math类返回的是double类型的值
同样,如果参数是正无穷大,则返回正无穷大,如果参数是0(不论正负),则返回0.0,显然,Math类方法都是静态方法,不需要使用对象即可调用!
2、常用的幂运算,java中没有幂运算,必须借助方法pow来实现;
double java.lang.Math.pow(double a, double b);参数和返回值都是double类型,结果为a的b次方。
3、还有常用的一些三角函数
比较特殊的一个;double java.lang.Math.atan2(double y, double x);
Returns the angle theta from the conversion of rectangular coordinates (
range of -pi topi.
ps;
极坐标,r是极径,theta也即是贼他角,有公式;
x=r*cos(theta);
y=r*sin(theta);
x^2 + y^2 = r^2;
Parameters:
y the ordinate coordinate
x the abscissa coordinate
Returns:the theta component of the point (r, theta) in polar coordinates that corresponds to the point (x, y) in Cartesian coordinates.
参数是极坐标的参数,但是返回的值是在对应的(相符合)直角坐标系的范围内计算得出的(double类型的),反正切返回的角等于 X 轴正方向与通过原点和给定坐标点 (Y坐标, X坐标) 的射线之间的夹角(y/x)的结果,以弧度表示,并介于 -pi 到 pi 之间。
4、对数函数
特别的;double java.lang.Math.log1p(double x)
Returns the natural logarithm of the sum of the argument and 1. Note that for small values
The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic.
Parameters:x a valueReturns:the value ln(
1.5
返回的是ln(x+1)的结果(自然对数)
5、指数函数(e为底的)
PS;为了避免使用前缀(Math),我们可以采用静态导入
double java.lang.Math.expm1(double x)
Returns ex -1. Note that for values of x near 0, the exact sum of
Parameters:x the exponent to raise e to in the computation ofe
Returns:the value e
Returns:the value e
必须知道,这个Math类是使用的计算机的浮点运算,来达到最佳的计算性能,不过结果有时候会出现不可预测的情况
如果想得一个完全的可以预测的结果的话,就必须使用StrictMath类,它的实现算法是来自免费发布的数学库(fdlibm),全部使用c语言编写
作用;实现java程序的轻量级应用,使程序计算在所有的平台确定都得到一样的结果。
The class
numeric functions in this package require that they produce the same results as certain published algorithms. These algorithms are available from the well-known network library
of Java floating-point arithmetic.
The Java math library is defined with respect to
Since:1.3Author:unascribedJoseph D. Darcy
包含;基本的指数,对数,平方跟,三角函数等
ps;
很浅显的使用,具体的实现算法,后来在研究。
1、比如,我们时常用到的平方根函数,数学函数类的官方说明;
double java.lang.Math.sqrt(double a)
Returns the correctly rounded positive square root of a
doublevalue. Special cases:
If the argument is NaN or less than zero, then the result is NaN.
If the argument is positive infinity, then the result is positive infinity.
If the argument is positive zero or negative zero, then the result is the same as the argument.
Otherwise, the result is the
doublevalue closest to the true mathematical square root of the argument value.
Parameters:a a value.Returns:the positive square root of
a. If the argument is NaN or less than zero, the result is NaN.
分析;Math类返回的是double类型的值
double double_x = 8; double double_y = Math.sqrt(double_x); System.out.println(double_y);打印;2.8284271247461903
double double_x = -4; double double_y = Math.sqrt(double_x); System.out.println(double_y);参数是负数,则返回“不是数值NaN”,打印;NaN
同样,如果参数是正无穷大,则返回正无穷大,如果参数是0(不论正负),则返回0.0,显然,Math类方法都是静态方法,不需要使用对象即可调用!
2、常用的幂运算,java中没有幂运算,必须借助方法pow来实现;
double x = Math.pow(3, 2); System.out.println(x);打印;9.0
double java.lang.Math.pow(double a, double b);参数和返回值都是double类型,结果为a的b次方。
3、还有常用的一些三角函数
// 仍然都是返回double,参数也是double类型 System.out.println(Math.sin(1.5707963267948966));// 打印1.0 System.out.println(Math.cos(0));// 打印1.0 System.out.println(Math.tan(0));// 打印0.0 // cos(0)=1;则反函数acos打印0.0 System.out.println(Math.acos(1)); System.out.println(Math.asin(1));//1.5707963267948966 System.out.println(Math.atan(0));//0.0
比较特殊的一个;double java.lang.Math.atan2(double y, double x);
Returns the angle theta from the conversion of rectangular coordinates (
x,
y) to polar coordinates (r, theta). This method computes the phasetheta by computing an arc tangent of
y/xin the
range of -pi topi.
ps;
极坐标,r是极径,theta也即是贼他角,有公式;
x=r*cos(theta);
y=r*sin(theta);
x^2 + y^2 = r^2;
Parameters:
y the ordinate coordinate
x the abscissa coordinate
Returns:the theta component of the point (r, theta) in polar coordinates that corresponds to the point (x, y) in Cartesian coordinates.
参数是极坐标的参数,但是返回的值是在对应的(相符合)直角坐标系的范围内计算得出的(double类型的),反正切返回的角等于 X 轴正方向与通过原点和给定坐标点 (Y坐标, X坐标) 的射线之间的夹角(y/x)的结果,以弧度表示,并介于 -pi 到 pi 之间。
4、对数函数
System.err.println(Math.E);// 2.718281828459045 System.out.println(Math.PI);// 3.141592653589793 System.out.println(Math.log(Math.E));// 1.0 这是自然对数(以e为底的e的对数为1) System.out.println(Math.log10(10.0));// 1.0 这是以10为底的10.0的对数,为1
特别的;double java.lang.Math.log1p(double x)
Returns the natural logarithm of the sum of the argument and 1. Note that for small values
x, the result of
log1p(x)is much closer to the true result of ln(1 +
x) than the floating-point evaluation of
log(1.0+x).
The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic.
Parameters:x a valueReturns:the value ln(
x+ 1), the natural log of
x+ 1Since:
1.5
返回的是ln(x+1)的结果(自然对数)
5、指数函数(e为底的)
PS;为了避免使用前缀(Math),我们可以采用静态导入
import static java.lang.Math.*;这样的话,就不必每次都写Math.了。
System.out.println(exp(1.0));打印;2.718281828459045
double java.lang.Math.expm1(double x)
Returns ex -1. Note that for values of x near 0, the exact sum of
expm1(x)+ 1 is much closer to the true result ofex than
exp(x).
Parameters:x the exponent to raise e to in the computation ofe
x-1.
Returns:the value e
x- 1.Since:1.5
System.out.println(expm1(1.0));打印;1.718281828459045
Returns:the value e
x- 1.
必须知道,这个Math类是使用的计算机的浮点运算,来达到最佳的计算性能,不过结果有时候会出现不可预测的情况
如果想得一个完全的可以预测的结果的话,就必须使用StrictMath类,它的实现算法是来自免费发布的数学库(fdlibm),全部使用c语言编写
作用;实现java程序的轻量级应用,使程序计算在所有的平台确定都得到一样的结果。
System.out.println(StrictMath.PI);// 3.141592653589793 System.out.println(StrictMath.abs(-1.0));// 1.0java.lang.StrictMath
The class
StrictMathcontains methods for performing basic numeric operations such as the elementary exponential, logarithm, square root, and trigonometric functions.To help ensure portability of Java programs, the definitions of some of the
numeric functions in this package require that they produce the same results as certain published algorithms. These algorithms are available from the well-known network library
netlibas the package "Freely Distributable Math Library,"
fdlibm. These algorithms, which are written in the C programming language, are then to be understood as executed with all floating-point operations following the rules
of Java floating-point arithmetic.
The Java math library is defined with respect to
fdlibmversion 5.3. Where
fdlibmprovides more than one definition for a function (such as
acos), use the "IEEE 754 core function" version (residing in a file whose name begins with the letter
e). The methods which require
fdlibmsemantics are
sin,
cos,
tan,
asin,
acos,
atan,
exp,
log,
log10,
cbrt,
atan2,
pow,
sinh,
cosh,
tanh,
hypot,
expm1, and
log1p.
Since:1.3Author:unascribedJoseph D. Darcy
包含;基本的指数,对数,平方跟,三角函数等
ps;
很浅显的使用,具体的实现算法,后来在研究。
相关文章推荐
- 微软Word 2007数学插件 Microsoft Math 提供下载
- 关于C# Math 处理奇进偶不进的实现代码
- JavaScript Math.ceil() 函数使用介绍
- shell 中数学计算总结
- Ajax获取页面被缓存的解决方法
- JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
- PHP几个数学计算的内部函数学习整理
- JavaScript中Math对象使用说明
- javascript对象之内置对象Math使用方法
- 基于java math API 的详细解释说明
- 在PHP模板引擎smarty生成随机数的方法和math函数详解
- js中Math之random,round,ceil,floor的用法总结
- js Math 对象的方法
- Javascript Math对象
- python基础教程之数字处理(math)模块详解
- Javascript Math ceil()、floor()、round()三个函数的区别
- js中的Math函数库
- js Math 中数学函数用法 取整出 向上取整 向下取整
- 第5章 运算符和类型强制转换
- Mathematician gucci shoes