这是本人的调试代码,都贴在下面了:
@RequiresApi(api = Build.VERSION_CODES.N)
public static void main(String[] args){
double pi = Math.PI;//圆周率
System.out.println("圆周率:"+pi);
//======================================================
double e = Math.E;//E的常量
System.out.println("E的常量:"+e);
//======================================================
float abs = Math.abs(-1.0f);//绝对值
System.out.println("绝对值:"+abs);
//======================================================
double sin = Math.sin(2 * Math.PI/360 * 90);//正弦,传值为弧度,弧度的计算公式为: 2*PI/360*角度
System.out.println("正弦:"+sin);
double asin = Math.asin(sin);//反正弦,传值范围是[-1,1],返回值是弧度
System.out.println("反正弦:"+asin);
//双曲正弦Math.sinh(x) = (Math.exp(x)+Math.exp(-x))/2
double sinh = Math.sinh(0);//双曲正弦
System.out.println("双曲正弦:"+sinh);
//======================================================
double cos = Math.cos(2 * Math.PI/360 * 0);//余弦,传值为弧度,弧度的计算公式为: 2*PI/360*角度
System.out.println("余弦:"+cos);
double acos = Math.acos(0.5);//反余弦,传值范围是[-1,1],返回值是弧度
System.out.println("反余弦:"+acos);
//双曲余弦Math.cosh(x) = (Math.exp(x)+Math.exp(-x))/2
double cosh = Math.cosh(0);//双曲余弦
System.out.println("双曲余弦:"+cosh);
//======================================================
//假设直线与X轴正方向角度为45度,求斜率
double tan = Math.tan(2 * Math.PI/360 * 45);//正切,已知角度或者弧度,求斜率
System.out.println("正切:"+tan);
//假设有两个点:(0,0),(Math.sqrt(3),1),求斜率
//斜率 = (y1-y2)/(x1-x2)= (Math.sqrt(3) - 0)/(1 - 0)=Math.sqrt(3)
double atan = Math.atan(Math.sqrt(3));//反正切,传值为斜率,返回值为弧度
System.out.println("反正切:"+atan);
double atan2 = Math.atan2(Math.sqrt(3) - 0, 1 - 0);//反正切,传值为两点之差(第一个参数:y2-y1,第二个参数x2-x1),返回值为弧度
System.out.println("反正切:"+atan2);
//======================================================
double degress = Math.toDegrees(2 * Math.PI/360 * 90);//弧度转角度
System.out.println("弧度转角度:"+degress);
double radians = Math.toRadians(degress);//角度转弧度
System.out.println("角度转弧度:"+radians);
//======================================================
double ceil = Math.ceil(10.2);//不小于某数的最小整数(进一法)
System.out.println("不小于某数的最小整数(进一法):"+ceil);
double floor = Math.floor(10.8);//不大于某数的最大整数(退一法)
System.out.println("不大于某数的最大整数(退一法):"+floor);
double round1 = Math.round(10.2);//四舍五入1
double round2 = Math.round(10.5);//四舍五入2
System.out.println("四舍五入1:"+round1);
System.out.println("四舍五入2:"+round2);
double rint = Math.rint(10.5);//距离某数最近的整数
System.out.println("距离某数最近的整数:"+rint);
//======================================================
double exp = Math.exp(1);//E的任意次方
System.out.println("E的任意次方:"+exp);
//======================================================
double log10 = Math.log10(10);//以10为底的对数
System.out.println("以10为底的对数:"+log10);
double log = Math.log(e);//自然对数,就是所谓的ln,以E为底的对数
System.out.println("自然对数:"+log);
//======================================================
double random = Math.random();//[0,1)区间内的随机数
System.out.println("随机数:"+random);
//======================================================
double ieeeremainder1 = Math.IEEEremainder(8, 3);//取余
System.out.println("取余1:"+ieeeremainder1);
double ieeeremainder2 = getIEEERemainder(8, 3);//取余
System.out.println("取余2:"+ieeeremainder2);
double modulus1 = getModulus(8, 3);//取模
System.out.println("取模1:"+modulus1);
double modulus2 = 8 % 3;//取模
System.out.println("取模2:"+modulus2);
//======================================================
double max = Math.max(1, 1.1);
System.out.println("最大数:"+max);
double min = Math.min(1, 1.1);
System.out.println("最小数:"+min);
//======================================================
double sqrt = Math.sqrt(4);//开平方根
System.out.println("开平方根:"+sqrt);
double cbrt = Math.cbrt(8);
System.out.println("开立方根:"+cbrt);
//======================================================
double pow = Math.pow(2,3);//某数的任意次方
System.out.println("某数的任意次方:"+pow);
//======================================================
double nextDown = Math.nextDown(1.1);
System.out.println("比某数小0.00...001:"+nextDown);
double nextUp = Math.nextUp(1.1);
System.out.println("比某数大0.00...001:"+nextUp);
//======================================================
double addExact = Math.addExact(1, 3);//加法运算
System.out.println("加法运算:"+addExact);
double subtractExact = Math.subtractExact(1, 3);//减法运算
System.out.println("减法运算:"+subtractExact);
double multiplyExact = Math.multiplyExact(1, 3);//乘法运算
System.out.println("乘法运算:"+multiplyExact);
//======================================================
//copySign(magnitude,sign) 用sign的符号替代magnitude的符号
double copySign = Math.copySign(-2, 1.1);
System.out.println("替换符号之后的值:"+copySign);
//======================================================
double expm1 = Math.expm1(0);//相当于Math.exp(0) - 1
System.out.println("expm1:"+expm1);
//======================================================
//x = Math.getExponent(y)相当于y = Math.pow(2, x)
double exponent = Math.getExponent(1);//无偏差指数
// 如果参数为NaN或无穷大,那么结果是Float.MAX_EXPONENT+1。
// 如果参数是零或小于正常值,那么结果是Float.MIN_EXPONENT-1。
System.out.println("无偏差指数:"+exponent);
//======================================================
double hypot = Math.hypot(Math.sqrt(2), Math.sqrt(2));//返回所有平方和的平方根
System.out.println("平方和的平方根:"+hypot);
//======================================================
double floorDiv = Math.floorDiv(9, 2);//返回等于或小于代数商的最大整数值
System.out.println("返回等于或小于代数商的最大整数值:"+floorDiv);
//======================================================
double floorMod = Math.floorMod(8, 3);//返回余数
System.out.println("返回余数:"+floorMod);
//======================================================
double loglp = Math.log1p(e-1);// 函数返回一个数字加1后的自然对数 (底为 E), 既log(x+1).
System.out.println(" 函数返回一个数字加1后的自然对数 :"+loglp);
//======================================================
double nextAfter = Math.nextAfter(1.1, 1.2);//返回第一个参数和第二个参数之间与第一个参数相邻的浮点数
System.out.println(" 返回第一个参数和第二个参数之间与第一个参数相邻的浮点数 :"+nextAfter);
//======================================================
double scalb = Math.scalb(2, 3);//返回第一个参数乘以2的第二个参数次方
System.out.println(" 返回第一个参数乘以2的第二个参数次方 :"+scalb);
//======================================================
double signum = Math.signum(-2.0);//方法返回参数的符号函数,如果参数为0返回零,如果参数大于零返回1.0,如果参数小于零返回-1.0
System.out.println(" 参数的符号函数 :"+signum);
//======================================================
double ulp = Math.ulp(956.294);//返回参数的ulp大小
System.out.println(" 返回参数的ulp大小 :"+ulp);
//======================================================
double decrementExact = Math.decrementExact(-100);//无溢出运算,具体用法不清楚,演示运行规则发现这个运算的返回值是x-1
System.out.println(" 无溢出运算1:"+decrementExact);
double negateExact = Math.negateExact(-1);//返回x乘以负一
System.out.println(" 无溢出运算2 :"+negateExact);//具体用法不清楚
double toIntExact = Math.toIntExact(-100);//返回原来的数,具体用法不清楚
System.out.println(" 无溢出运算3 :"+toIntExact);
//======================================================
}
/**
* 取余运算
* @param dividend 除数
* @param divisor 被除数
* @return
*/
private static double getIEEERemainder(double dividend, double divisor){
double iEEERemainder = dividend - (divisor * Math.round(dividend / divisor));
return iEEERemainder;
}
/**
* 取模运算
* @param dividend 除数
* @param divisor 被除数
* @return
*/
private static double getModulus(double dividend, double divisor){
double modulus = (Math.abs(dividend) - (Math.abs(divisor) * (Math.floor(Math.abs(dividend) / Math.abs(divisor))))) * Math.sin(dividend);
return modulus;
}
运行结果如下:
圆周率:3.141592653589793
E的常量:2.718281828459045
绝对值:1.0
正弦:1.0
反正弦:1.5707963267948966
双曲正弦:0.0
余弦:1.0
反余弦:1.0471975511965979
双曲余弦:1.0
正切:0.9999999999999999
反正切:1.0471975511965976
反正切:1.0471975511965976
弧度转角度:90.0
角度转弧度:1.5707963267948966
不小于某数的最小整数(进一法):11.0
不大于某数的最大整数(退一法):10.0
四舍五入1:10.0
四舍五入2:11.0
距离某数最近的整数:10.0
E的任意次方:2.718281828459045
以10为底的对数:1.0
自然对数:1.0
随机数:0.39810529656674576
取余1:-1.0
取余2:-1.0
取模1:1.9787164932467636
取模2:2.0
最大数:1.1
最小数:1.0
开平方根:2.0
开立方根:2.0
某数的任意次方:8.0
比某数小0.00...001:1.0999999999999999
比某数大0.00...001:1.1000000000000003
加法运算:4.0
减法运算:-2.0
乘法运算:3.0
替换符号之后的值:2.0
expm1:0.0
无偏差指数:0.0
平方和的平方根:2.0
返回等于或小于代数商的最大整数值:4.0
返回余数:2.0
函数返回一个数字加1后的自然对数 :1.0
返回第一个参数和第二个参数之间与第一个参数相邻的浮点数 :1.1000000000000003
返回第一个参数乘以2的第二个参数次方 :16.0
参数的符号函数 :-1.0
返回参数的ulp大小 :1.1368683772161603E-13
无溢出运算1:-101.0
无溢出运算2 :1.0
无溢出运算3 :-1000000.0
Process finished with exit code 0
其中, 有几个点还是搞不清楚:
(1)取余和取模运算有什么区别?两种取模方法怎么值不一样?
(2)结尾处的几个无溢出运算的具体用法是什么?
有知道的大佬可以在下方留言!