Java基础__Java中常用数学类Math那些事
测试
package Cynical_Gary; public class Cynical_Text { public static void main(String[] args){ System.out.println("30°对应的弧度是:"+Math.toRadians(30)); System.out.println("π/6对应的角度是:"+Math.toDegrees(Math.PI/6)); System.out.println("45°对应的弧度是:"+Math.toRadians(45)); System.out.println("π/4对应的角度是:"+Math.toDegrees(Math.PI/4)); } } /* 输出: 30°对应的弧度是:0.5235987755982988 π/6对应的角度是:29.999999999999996 45°对应的弧度是:0.7853981633974483 π/4对应的角度是:45.0 */
package Cynical_Gary; public class Cynical_Text { public static void main(String[] args){ System.out.println("30°对应的正弦值是:"+Math.sin(Math.PI/6)); //计算30°的正弦值 System.out.println("30°对应的余弦值是:"+Math.cos(Math.PI/6)); //计算30°的余弦值 System.out.println("30°对应的正切值是:"+Math.tan(Math.PI/6)); //计算30°的正切值 } } /* 输出 30°对应的正弦值是:0.49999999999999994 30°对应的余弦值是:0.8660254037844387 30°对应的正切值是:0.5773502691896257 */
package Cynical_Gary; public class Gary_Text { public static void main(String[] args){ System.out.println("0.5的反正弦值是:"+Math.asin(0.5)); //计算0.5的反正弦值 System.out.println("0.866的反余弦值是:"+Math.acos(0.866)); //计算0.866的反余弦值 System.out.println("0.5774的反正切值是:"+Math.atan(0.5774)); //计算0.5774的反正切值 } } /* 输出: 0.5的反正弦值是:0.5235987755982989 0.866的反余弦值是:0.5236495809318289 0.5774的反正切值是:0.5236360729028994 */
package CynicalGary; public class Gary_Text { public static void main(String[] args) { System.out.println("30°的双曲正弦值:"+Math.sinh(30)); //计算30°的双曲正弦值 System.out.println("30°的双曲余弦值:"+Math.cosh(30)); //计算30°的双曲余弦值 System.out.println("30°的双曲正切值:"+Math.tanh(30)); //计算30°的双曲正切值 } } /* 输出 30°的双曲正弦值:5.343237290762231E12 30°的双曲余弦值:5.343237290762231E12 30°的双曲正切值:1.0 */
package Cynical_Gary; public class Gary_Text { public static void main(String[] args){ System.out.println("8的立方根是:"+Math.cbrt(8)); System.out.println("e的8次方是:"+Math.exp(8)); System.out.println("e的9次方是:"+Math.expm1(8)); System.out.println("8的自然对数是:"+Math.log(8)); System.out.println("8的10为底的对数是:"+Math.log10(8)); System.out.println("9的自然对数是:"+Math.log1p(8)); System.out.println("2的3次方是:"+Math.pow(2,3)); System.out.println("8的平方根是:"+Math.sqrt(8)); } } /* 输出: 8的立方根是:2.0 e的8次方是:2980.9579870417283 e的9次方是:2979.9579870417283 8的自然对数是:2.0794415416798357 8的10为底的对数是:0.9030899869919435 9的自然对数是:2.1972245773362196 2的3次方是:8.0 8的平方根是:2.8284271247461903 */
package CynicalGary; import java.math.BigInteger; public class Gary_Text { public static void main(String[] args) { BigInteger number1 = new BigInteger("987654321"); //申明高精度整数number1 BigInteger number2 = new BigInteger("123456789"); //申明高精度整数number2 BigInteger addition = number1.add(number2); //计算number1加number2 BigInteger subtraction = number1.subtract(number2);//计算number1减number2 BigInteger multiplication = number1.multiply(number2);//计算number1乘number2 BigInteger division = number1.divide(number2);//计算number1除number2 System.out.println("高精度整数number1:"+number1); System.out.println("高精度整数number2:"+number2); System.out.println("高精度加法:"+addition); System.out.println("高精度减法:"+subtraction); System.out.println("高精度乘法:"+multiplication); System.out.println("高精度除法:"+division); } } /* 输出 高精度整数number2:123456789 高精度加法:1111111110 高精度减法:864197532 高精度乘法:121932631112635269 高精度除法:8 */
Java中的BigInteger类虽然能大幅度提高运算的精度,但是却牺牲性能,对于普通运算不推荐使用(但相对于C用char数值来模拟大数运算,不得不说Java在ACM中解决大数问题处于很大优势地位)
package CynicalGary; import java.math.BigDecimal; import java.math.RoundingMode; public class Gary_Text { public static void main(String[] args) { BigDecimal number1 = new BigDecimal("9.87654321"); //申明高精度浮点数number1 BigDecimal number2 = new BigDecimal("1.23456789"); //申明高精度浮点数number2 BigDecimal addition = number1.add(number2); //计算number1加number2 BigDecimal subtraction = number1.subtract(number2);//计算number1减number2 BigDecimal multiplication = number1.multiply(number2);//计算number1乘number2 BigDecimal division = number1.divide(number2,RoundingMode.HALF_UP);//计算number1除number2 //以四舍五入的方式获得高精度运算的结果 System.out.println("高精度浮点数number1:"+number1); System.out.println("高精度浮点数number2:"+number2); System.out.println("高精度加法:"+addition); System.out.println("高精度减法:"+subtraction); System.out.println("高精度乘法:"+multiplication); System.out.println("高精度除法:"+division); } } /* 输出 高精度浮点数number2:1.23456789 高精度加法:11.11111110 高精度减法:8.64197532 高精度乘法:12.1932631112635269 高精度除法:8.00000007 */
Java中的BigDecimal类同理BigInteger类,牺牲了速度,但换来了精度。
package Cynical_Gary; import java.util.Random; public class Gary_Text { public static void main(String[] args){ for(int i=0;i<7;i++) { int number = new Random().nextInt((int)Math.pow(10,7)); //生成随机数 String Number = ""+number; while(Number.length()<7){ Number="0"+number; //如果随机长度不够7位用0补齐 } System.out.println(Number); } } } /* 输出: 0910840 6974776 7981768 9823061 3303485 8317801 9042881 */
//Math.abs()此方法返回一个整数的绝对值 package Cynical_Gary; public class Gary_Text { public static void main(String[] args){ System.out.println(Math.abs(-2147483648)); } } /* 输出: -2147483648 原因: java 32位int的值域为(-2147483648,2147483647] 最大值为:2147483647, 二进制:01111111111111111111111111111111 最小值为:-2147483648,二进制:10000000000000000000000000000000 -2147483648的二进制正码:10000000000000000000000000000000 -2147483648的二进制反码:01111111111111111111111111111111 -2147483648的二进制反码+1:10000000000000000000000000000000 二进制数字和原来的一样了 */
一、角度和弧度转换
30°正弦值 Math.sin(Math.PI/6)); 30°余弦值 Math.cos(Math.PI/6)); 30°正切值 Math.tan(Math.PI/6));
Math.toRadians()方法用于将角度转换为弧度(静态方法)
public static double toRadians(double angdeg)
angdeg:用角度表示的角
返回值:角angdeg用弧度表示的值
Math.toDegrees()方法用于将弧度转换为角度(静态方法)
public static double toDegress(double angrad)
angrad:用弧度表示的角
返回值:角angrad用角度表示的值
二、三角函数的转换
30°正弦值 Math.sin(Math.PI/6) 30°余弦值 Math.cos(Math.PI/6) 30°正切值 Math.tan(Math.PI/6)
Math.sin()方法用于求指定角的正弦值(静态方法)
public static double sin(double a)
a:用弧度表示的角
返回值:角a的正弦值
Math.cos()方法用于求指定角的余弦值(静态方法)
public static double cos(double a)
a:用弧度表示的角
返回值:角a的余弦值
Math.tan()方法用于求指定角的正切值(静态方法)
public static double tan(double a)
a:用弧度表示的角
返回值:角a的正切值
三、反三角函数的转换
0.5的反正弦值 Math.asin(0.5) 0.5的反正弦值 Math.asin(0.5) 0.5774的反正切值 Math.atan(0.5774)
Math.asin()方法用于返回指定值的反正弦值(静态方法)
public static double asin(double a)
a:要返回其反正弦的值
返回值:值a的反正弦值
Math.acos()方法用于返回指定值的反余弦值(静态方法)
public static double acos(double a)
a:要返回其反余弦的值
返回值:值a的反余弦值
Math.atan()方法用于返回指定值的反正切值(静态方法)
public static double atan(double a)
a:要返回其反正切的值
返回值:值a的反正切值
四、双曲函数的转换
30°双曲正弦值 Math.sinh(30) 30°双曲余弦值 Math.cosh(30) 30°双曲正切值 Math.tanh(30)
Math.sinh()方法用于返回指定值的双曲正弦值(静态方法)
public static double sinh(double a)
a:要返回双曲正弦值的数值
返回值:值a的双曲正弦值
Math.cosh()方法用于返回指定值的双曲余弦值(静态方法)
public static double cosh(double a)
a:要返回双曲余弦值的数值
返回值:值a的双曲余弦值
Math.tanh()方法用于返回指定值的双曲正切值(静态方法)
public static double tanh(double a)
a:要返回双曲正切值的数值
返回值:值a的双曲正切值
五、指数与对数的转换
8的立方根 Math.cbrt(8) e的8次方 Math.exp(8) e的9次方 Math.expm1(8) 8的自然对数 Math.log(8) 8的10为底的对数 Math.log10(8) 9的自然对数 Math.log1p(8) 2的3次方 Math.pow(2,3) 8的平方根 Math.sqrt(8)
六、随机数的生成
Random.setSeed()方法使用单个long种子,设置此随机数生成器的种子值
public void setSeed(long seed)
seed:为随机数生成器设置的种子值
Random.nextInt()方法用于返回一个伪随机数,它取此随机数生成器序列0(包括0)和指定值(不包括)之间均匀分布的Int值
public int nextInt(int n)
n:要返回随机数的范围,必须是整数
返回值:下一个伪随机数