zoukankan      html  css  js  c++  java
  • 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
    
    二进制数字和原来的一样了
    */
    有趣的Math.abs()

    一、角度和弧度转换

     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:要返回随机数的范围必须是整数

      返回值:下一个伪随机数

    (如需转载学习,请标明出处)
  • 相关阅读:
    久违的问候-----eclipse中搭建maven项目2016年
    jdbc在mysql下一次执行多条sql脚本
    Oracle客户端连接远程Oracle服务中文乱码问题
    Hibernate 3.3.2 文档翻译 Day01
    Linux学习之Exam系统发布
    js封装用户选项传递给Servlet之考试系统二
    MySQL中的全文索引
    60分钟Python快速学习(给发哥一个交代)
    优化MySchool数据库设计之【巅峰对决】
    微冷的雨Java基础学习手记(一)
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/9144046.html
Copyright © 2011-2022 走看看