属于java.lang.Math,即java.lang包,不需要import. 当然,为了方便用其中大量的静态方法和类变量,也可以用静态导入: import static java.lang.Math;
Math类包含执行基本数字运算的方法,如初等指数、对数、平方根和三角函数。
与类StricMath的一些数值方法不同,Math类的所有等价函数的实现都没有定义为返回位相同结果的位。这种松弛允许在不需要严格再现性的情况下更好地执行。 (简单的说明一下StrictMath类:
StricMath类包含执行基本数值运算的方法,如初等指数函数、对数函数、平方根函数和三角函数。
为了帮助确保Java程序的可移植性,这个包中的一些数值函数的定义要求它们产生与某些已发布的算法相同的结果。这些算法可以从著名的网络库netlib获得,作为包“自由分配的数学库”fdlibm。这些算法以C语言编写,然后被理解为遵循Java浮点运算规则的所有浮点运算来执行。
Java Math库是针对fdlbm版本5.3定义的。如果fdlibm为函数(如acos)提供多个定义,请使用“IEEE 754核心函数”版本(位于名称以字母e开头的文件中)。需要fdlibm语义的方法有sin、cos、tan、asin、acos、atan、exp、log、log10、cbrt、atan2、pow、sinh、cosh、tanh、hypot、expm1和log1p。
该平台使用带符号二的整数补码算法和int和long原语类型。开发人员应该选择原语类型,以确保算术运算一致地产生正确的结果,这在某些情况下意味着运算不会超出计算值的范围。最佳实践是选择基元类型和算法以避免溢出。在大小为int或long且需要检测溢出错误的情况下,当结果溢出时,addExact, subtractExact, multiplyExact, 和toIntExact方法会引发算术异常(ArithmeticException)。对于其他算术运算,如除、绝对值、递增、递减和负溢出,只会出现特定的最小值或最大值,应根据最小值或最大值进行检查。)
在默认情况下,许多Math方法只是简单地称之为StrictMath中的等价方法来实现它们。鼓励代码生成器使用特定于平台的本机库或微处理器指令(如果可用),以提供更高性能的Math方法实现。如此高的性能实现仍然必须符合数学规范。
实施规范的质量关系到两个方面,返回结果的准确性和方法的单调性。浮点Math方法的准确度是以ulp为单位进行测量的,最后是以单位进行测量的。对于Agiven浮点格式,特定实数值的ulp是包含该数值的两个浮点值之间的距离。当将一个方法作为一个整体而不是某个特定的参数来讨论它的准确性时,引用的ULP的数量对于任何参数的最坏情况都是错误的。如果一个方法的错误总是小于0.5 ulps,那么该方法总是返回最接近精确结果的浮点数字;这样的方法是正确的。正确的四舍五入法通常是最好的浮点数近似法;然而,任何形式的浮点数法都不能正确地四舍五入。相反,对于Math类,对于某些方法,允许使用较大的1或2 ulps的错误范围。通常情况下,如果有1ulp的误差限制,当精确结果是一个可表示的数字时,应将精确结果作为计算结果返回;否则,括号中的两个浮点值中的任何一个都可能被返回。对于规模较大的精确结果,括号的一个端点可能是无限的。除个别论据的准确性外,保持不同论据的方法之间的适当关系也很重要。因此,误差大于0.5ulp的大多数方法都要求是半单调的:无论何时数学函数是递减的,浮点近似也是,同样,无论何时数学函数是非递增的,浮点近似也是。并非所有精度为1的近似值都能自动满足单调性要求。
该平台使用带符号二的整数补码算法,并带有int和long基元类型。开发人员应选择原语类型以确保算术运算一致地产生正确的结果,这在某些情况下意味着运算不会超出计算值的范围。最佳做法是选择原语类型和算法以避免溢出。当大小为int或long且需要检测溢出错误时,addexact、subtractexact、multiplyexact和tointexact方法会在结果溢出时引发算术异常。对于除、绝对值、增量为1、减量为1和负数等其他算术操作,溢出只在特定的最小值或最大值,应根据最小值或最大值进行检查。
蒟蒻萌新瑟瑟发抖。。。
我们对比版本可见:Math类是1.0版本就有的;StrictMath类是1.3版本才有的。
继续讲Math类,它有两个静态的属性(类变量):E和PI,注意是大写哦!调用的时候往往是表示为Math.E和Math.PI。
再讲讲Math类的方法(全是静态的):
一共有50种不同名的方法:
abs(…a):作用是返回参数的绝对值 参数可以是double、float、int、long四种,返回对应的类型
acos(double a):作用是返回参数的反余弦函数的值 参数是double型,返回浮点数从0.0到π,π也是以浮点数呈现 输入数据限定-1到1,否则会返回NaN(非数)
addExact(…x, …y):作用是返回两参数的和(求和) 参数是int+int或者long+long,返回对应类型的数值 一旦求和后结果发生溢出会抛出异常
asin(double a):作用是返回参数的反正弦函数的值 参数是double型,返回浮点数从-π/2到π/2,π也是以浮点数呈现 输入数据限定-1到1,否则会返回NaN(非数)
atan(double a):作用是返回参数的反正切函数的值 参数是double型,返回浮点数从-π/2到π/2,π也是以浮点数呈现 POSITIVE_INFINITY和NEGATIVE_INFINITY不能用做参数的
atan2(double y,double x):作用是返回从直角坐标(x,y)转换为极坐标(r,θ)的θ角 返回double型
cbrt(double a):作用是返回参数的立方根 返回double型
ceil(double a):作用是返回大于或等于参数且数值上等于整数的最小(最接近负无穷大)的浮点数 返回double型 解释的通俗点就是向上取整后转成数学上相等的double型
copySign(…magnitude, …sign):返回第一个参数,它会带上第二个浮点参数符号(+/-) 参数可以是double、float两种,返回对应的类型 返回double型
cos(double a):作用是返回参数的余弦函数的值 返回double型
cosh(double x):作用是返回参数的双曲余弦函数的值 返回double型
decrementExact(…a):作用是返回参数-1的值 参数可以是int、long两种,返回对应的类型 一旦-1后结果发生溢出会抛出异常
exp(double a):作用是返回e^a,以e为底的指数函数 返回double型
expm1(double x):作用是返回(e^a)-1,以e为底的指数函数值-1 返回double型
floor(double a):作用是返回小于或等于参数且数值上等于整数的最大(最接近正无穷大)的浮点数 返回double型
floorDiv(…x, …y):作用是返回小于或等于代数运算所得商的最大(最接近正无穷大)值 参数可以是int+int、long+int、long+long三种 int+int返回int,其余两个返回long
floorMod(…x, …y):作用是返回小于或等于代数运算所得模的最大(最接近正无穷大)值 参数可以是int+int、long+int、long+long三种 int+int返回int,其余两个返回long
fma(…a, …b, …c):作用是返回前两个数相加后与第三个数相乘得到的值 参数可以是double+double+double、float+float+float两种,返回对应的类型
getExponent(…d/f):作用是返回无偏指数 参数可以是double d、float f两种 返回int 无偏指数的话,可以在这里看一看咯,自行理解:Here
hypot(double x, double y):作用是返回没有中间溢出或下溢的sqrt(x^2 + y^2) 返回double型
IEEEremainder(double f1, double f2):作用是根据IEEE754标准的规定,对两个参数计算剩余操作 返回double型
incrementExact(…a):作用是返回参数+1 参数可以是int、long两种,返回对应的类型 一旦+1后结果发生溢出会抛出异常
log(double a):作用是返回参数的自然对数(以e为底a的对数) 返回double型
log10(double a):作用是返回参数的常用对数(以10为底a的对数) 返回double型
log1p(double x):作用是返回参数+1后取的自然对数(以e为底a+1的对数) 返回double型
max(…a, …b):作用是返回两个数里最大的(相对更大的)一个数 参数可以是double+double、float+float、int+int、long+long四种,返回对应的类型
min(…a, …b):作用是返回两个数里最小的(相对更小的)一个数 参数可以是double+double、float+float、int+int、long+long四种,返回对应的类型
multiplyExact(…x, …y):作用是返回两个数的乘积 参数可以是int+int、long+int、long+long三种 int+int返回int,其余两个返回long 一旦做乘积后结果发生溢出会抛出异常
multiplyFull(int x, int y):作用是返回参数的精确的数学乘积 参数为int,返回long
multiplyHigh(long x,long y):作用是作为一个long返回两个64位因子的128位积中最重要的64位 返回long
negateExact(…a):作用是返回参数的相反数 参数可以是int、long两种,返回对应的类型 取相反数后如果溢出会抛出异常
nextAfter(…start, …direction):作用是返回第二个参数方向上与第一个参数相邻的浮点数 参数可以是double+double、float+double两种 返回值随第一个参数走 这个方法我简单的解释一下:我用的其中三组测试数据是这样的:
System.out.println(Math.nextAfter(1.0, 2.0)); System.out.println(Math.nextAfter(1.0, 10.0)); System.out.println(Math.nextAfter(1.0, -1.0));输出结果则是:
1.0000000000000002 1.0000000000000002 0.9999999999999999相信大家自行体会可以明白的
nextDown(…d/f):作用是返回在负无穷大方向上与d/f相邻的浮点值 参数可以是double d、float f两种,返回对应的类型 这个方法我简单的解释一下:我用的其中四组测试数据是这样的: System.out.println(Math.nextDown(1.0)); System.out.println(Math.nextDown(2.0)); System.out.println(Math.nextDown(3.0)); System.out.println(Math.nextDown(10.0));输出结果则是:
0.9999999999999999 1.9999999999999998 2.9999999999999996 9.999999999999998相信大家自行体会可以明白的
nextUp(…d/f):作用是返回在正无穷大方向上与d/f相邻的浮点值 参数可以是double d、float f两种,返回对应的类型 和上面的33.nextDown(…)方法类似,不做赘述
pow(double a, double b):作用是返回第一个参数的第二个参数次幂(a^b) 返回double型
random():作用是返回一个介于0.0和1.0之间的(伪随机)正数 伪随机数的知识可以参考百度百科:https://baike.baidu.com/item/伪随机数/104358?fr=aladdin 返回double型
rint(double a):作用是返回在数学上等于与参数值最接近且是整数的double 返回double型 (解释的比较拗口,抱歉) 解释的通俗一点就是四舍五入后取数学上相等的double型浮点
round(…a):作用是返回参数四舍五入后的整数值 参数可以是double、float两种 double参数返回long,float参数返回int
scalb(…d/f, nt scaleFactor):作用是返回d ×2^scaleFactor 参数可以是double d、float f两种,返回对应的类型 相当于浮点×double的感觉
signum(…d/f):作用是返回符号函数的值 参数可以是double d 、float f两种,返回对应的类型 啰嗦点说就是返回参数的signum函数:如果参数为零,则返回零;如果参数大于零,则返回1.0;如果参数小于零,则返回-1.0 实在不懂符号函数可以参考百度百科
sin(double a):作用是返回参数的正弦函数的值 返回double型
sinh(double x):作用是返回参数的双曲正弦函数的值 返回double型
sqrt(double a):作用是返回四舍五入后的参数的平方根值 返回double型
subtractExact(…x, …y):作用是返回两参数的差 参数可以是int+int、long+long两种,返回对应的类型 结果如果超出相应范围则抛出异常
tan(double a):作用是返回参数的正切函数的值 返回double型
tanh(double x):作用是返回参数双曲正切函数的值 返回double型
toDegrees(double angrad):作用是将以弧度度量的角度转换为以度度量的近似等效角度 返回double型
toIntExact(long value):作用是将long转换成对应的int值输出 返回int 如果超出int值的范围则抛出异常
toRadians(double angdeg):作用是将以度为单位的角度转换为以弧度为单位的近似等效角度 返回double型
ulp(…d/f):作用是返回参数的ULP大小 参数可以是double d、float f两种,返回对应的类型 ULP我也不是很懂,查了查有这么个解释: 一个单位的最后的地方(浮点数) 我用的其中两组测试数据是这样的:
System.out.println(Math.ulp(10.0)); System.out.println(Math.ulp(100000.0));输出结果则是:
1.7763568394002505E-15 1.4551915228366852E-11Here
整理了很久,东西都是自己原创的,希望大家读后尊重劳动成果以及有所收获,蒟蒻表示谢谢 这里很多测试都是jshell完成的,这是个很棒的“工具”,希望大家好好利用!