首页 > 其他分享 >Math

Math

时间:2024-11-10 20:09:03浏览次数:2  
标签:System static println public Math out

Math 的继承结构:


图1

Math 在源码中的定义方式:


图2

Math 类的字段摘要, 即属性:


图3

继承自 Object, 被 final 修饰, 即不能再被继承.

Math 类属于 lang 包, 是不需要导包的.

是一个帮助我们用于进行数学计算的工具类, 私有化构造方法, 所有的方法都是静态方法.

常用方法:

  • max

  • min

  • ceil

  • floor

  • round

  • pow

  • random

  • sqrt

  • cbrt

  • pow

package MathDemo;

public class Demo1 {
    public static void main(String[] args) {
        // bug: 
        // 以 int 类型为例, 取值范围: -2147483648 - 2147483647
        // 如果没有正数与负数对应, 那么传递负数结果有误
        // -2147483648 没有正数与之对应, 所以 abs 结果产生 bug
        System.out.println(Math.abs(-2147483647));       // 2147483647
        System.out.println(Math.abs(-2147483648));       // -2147483648
        // 建议用 JDK 15 才开始有的一个方法: absExact(), 这样如果找不到对应的正整数, 程序会报错. 
        // System.out.println(Math.absExact(-2147483648));  // Exception in thread "main" java.lang.ArithmeticException: Overflow to represent absolute value of Integer.MIN_VALUE
    }
}

下面这两个常量在 Math 类中:

public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;

对于静态方法和静态变量(包括常量)可以用 Math.方法名Math.变量名 的方式直接调用, 但是也可以导入 Math 类而不用写 Math. 就能直接使用方法或变量.

在源文件的最上方加上:

import static java.lang.Math.*;

程序示例:

import static java.lang.Math.*;

public class MathDemo {
    public static void main(String[] args) {
        System.out.println(PI);             // 3.141592653589793
        System.out.println(E);              // 2.718281828459045
        System.out.println(cbrt(8));      // 2.0
    }
}

在 Math 类中, 为了达到最佳的性能, 所有的方法都使用计算机浮点单元中的例程. 如果得到一个完全可预测的结果比运行速度更重要的话, 就应该使用 StrictMath 类. 它实现了 "可自由分发数学库(Freely Distributable Math Library, FDLIBM)" 的算法, 确保在所有平台上得到相同的结果.

Math 类提供了一些方法使整数运算更安全. 如果一个计算溢出, 数学运算符只是悄悄地返回错误的结果而不做任何提醒. 例如, 10 亿乘以 3(1000000000 * 3)的计算结果将是 -1 294 967 296, 因为最大的 int 值也只是刚刚超过 20 亿. 不过, 如果调用 Math.multiplyExact(1000000000, 3), 就会生成一个异常. 你可以捕获这个异常或者让程序终止, 而不是允许它给出一个错误的结果然后悄无声息地继续运行. 另外, 还有一些方法(addExact, subtractExact, incrementExact, decrementExact, negateExact 和 absExact)也可以正确地处理 int 和 long 参数.

如果想舍入(round)一个浮点数来得到最接近的整数, 可以使用 Math.round 方法. round 方法的返回值是 long 类型.

程序示例:

public class MathDemo2 {
    public static void main(String[] args) {
        double a = 9.98;
        int b = (int) Math.round(a);
        System.out.println(b);          // 10
    }
}

程序示例:

public class MathDemo1 {
    public static void main(String[] args) {
        /*
            public static int abs(int a) 获取参数绝对值
            public static double ceil(double a) 向上取整
            public static double floor(double a) 向下取整
            public static int round(float a) 四舍五入
            public static int max(int a,int b) 获取两个int值中的较大值
            public static double pow(double a,double b) 返回a的b次幂的值
            public static double random() 返回值为double的随机值, 范围[0.0,1.0)
        */

        // abs 获取参数绝对值
        System.out.println(Math.abs(88));
        System.out.println(Math.abs(-88));

        // bug:
        // 以int类型为例, 取值范围: -2147483648~ 2147483647
        // 如果没有正数与负数对应, 那么传递负数结果有误
        //-2147483648 没有正数与之对应, 所以abs结果产生bug
        // system.out.println(Math.abs(-2147483647));//2147483647
        // System.out.println(Math.absExact(-2147483648));

        // 进一法, 往数轴的正方向进一
        System.out.println(Math.ceil(12.34));// 13.0
        System.out.println(Math.ceil(12.54));// 13.0
        System.out.println(Math.ceil(-12.34));//-12.0
        System.out.println(Math.ceil(-12.54));//-12.0

        System.out.println("-------------------------------");

        // 去尾法, 
        System.out.println(Math.floor(12.34));// 12.0
        System.out.println(Math.floor(12.54));// 12.0
        System.out.println(Math.floor(-12.34));//-13.0
        System.out.println(Math.floor(-12.54));//-13.0
        System.out.println("-------------------------------");
        // 四舍五入
        System.out.println(Math.round(12.34));// 12
        System.out.println(Math.round(12.54));// 13
        System.out.println(Math.round(-12.34));//-12
        System.out.println(Math.round(-12.54));//-13
        System.out.println("-------------------------------");
        // 获取两个整数的较大值
        System.out.println(Math.max(20, 30));// 30
        // 获取两个整数的较小值
        System.out.println(Math.min(20, 30));// 20
        System.out.println("-------------------------------");

        // 获取a的b次幂
        System.out.println(Math.pow(2, 3));// 8
        // 细节:
        // 如果第二个参数 0~ 1之间的小数
        // system.out.println(Math.pow(4,0.5));//2.0
        // System.out.println(Math.pow(2,-2));//0.25
        // 建议:
        // 第二个参数:一般传递大于等于1的正整数. 
        System.out.println(Math.sqrt(4));// 2.0
        System.out.println(Math.cbrt(8));// 2.0
        System.out.println("-------------------------------");
        for (int i = 0; i < 1; i++) {
            System.out.println(Math.floor(Math.random() * 100) + 1);
            // Math.random() [0.0 1.0)
            //* 100         [0.0 100.0)
            // floor         去掉了后面的小数
            //+1            [1 100.e]
        }
    }
}

标签:System,static,println,public,Math,out
From: https://www.cnblogs.com/Chengkai730/p/18538398

相关文章

  • SciTech-Mathmatics-BigDataAIML: PCA(Principle Component Analysis)主成分分析 的
    SciTech-Mathmatics-BigDataAIML:PCA(PrincipleComponentAnalysis)主成分分析参考链接HowtoCalculatePrincipalComponentAnalysis(PCA)fromScratchinPythonhttps://www.kaggle.com/code/aurbcd/pca-using-numpy-from-scratchPCAusingNumpyfromscratchhttps......
  • 11月7日 NOIP模拟(难题math、矩阵游戏matrix、括号序列seq、道路road) - 模拟赛记录
    PrefaceT1试图找规律失败,正经推反而几分钟就出来了。以后应该少想这些歪门邪道(除非实在闲的蛋疼或者没有一点头绪,且必须要打完所有能打的子任务比如暴力或特殊性质;而且必须在用常规方法思考过后,才能够用一些稍微不那么常规的方法)至于T2、T3、T4,因为知道T1浪费了太多时间,都是......
  • 题解:HDU5628 Clarke and math
    数学题可爱捏~HintAnalysis注意到形式很好看,猜测是某种神奇迭代。考虑特殊情况\(k=1\),于是有:\(g(i)=\sum_{i_1\midi}f(i_1)=(f*1)(i)\)$即\(g=f*1\)。于是猜测\(g=f*1^k\),这里的幂运算表示多次Dirichlet卷积。简单证明一下,采用数学归纳法:基本情况\(k=1\),已经证过,......
  • 初学Java基础---Day21---正则表达式,日期类,Math类,Random类,System类,Runtime类,大数值运
    一,正则表达式理解:        符合某个语句规范的字符串案例://案例:把一个字符串中带电话号码替换成130****1111的形式Stringstr="小红13012341111小绿15112342222小黑13912343333";//分析:电话号码可以分为三组如:(130)(1234)(1111)其中第一组中的1是固定/......
  • math.h包含什么内容
    1.基本算数运算函数fabs:计算浮点数的绝对值(默认情况下是double类型的) fmod:计算两个浮点数相除的余数(跟整形中的%比较类似,默认也是double类型的)fmin:两个浮点数中取出最小值 (默认也是double类型的)fmax:两个浮点数去除最大值(默认也是double类型的) 2.幂函数与指数函数p......
  • math.js 处理数据精度等问题
    math.js是一个用于Javascript和Node.js的广泛数字库。它具有一个灵活的表达式解析器,支持符号计算,带有大量内置函数和常量,并提供一个集成解决方案来处理不同的数据类型,如数字、大数、复数、分数、单位和矩阵。功能强大且易于使用。特征:支持数字、大数、bigint、复数、分数、单位......
  • java中的Math.round(-1.5)等于多少
       -1等于-1,因为在数轴上取值时,中间值(0.5)向右取整,所以正0.5是往上取整,负0.5是直接舍弃。(观点不认同)Math提供了三个与取整有关的方法:ceil、floor、round(1)ceil:向上取整;(2)floor:向下取整;(3)round:四舍五入;1、ceil:向上取整向上取整:无论小数点后面的数字是多少,都向上取整......
  • ME5701 Linear stability analysis of Mathieu equation
    AssignmentforPart2inME5701——LinearstabilityanalysisofMathieuequation—Duetime:23:59:59,Nov.15th,2024ThisassignmentwillguideyoutostudythestabilitypropertiesoftheMathieuequation.Pleasereadthroughcarefullytheproblemdescript......
  • JavaScript语法基础(函数,对象,常用类Array,String,Math和Date)
    JavaScript函数语法:function functionname(){    //执行代码}functioncalculator(a,b){c=a+b;//alert("a+b="+c);returnc;}console.log(c)</script><inputty......
  • 2024 年 MathorCup 数学应用挑战赛——大数据竞赛 赛道 A:台风的分类与预测 思路和代码
                       问题1:台风分类模型问题2:台风路径预测模型问题3:台风登陆后降水量与风速关系模型总结该题目分为三个主要问题,分别要求构建台风的分类模型、路径预测模型和降水风速模型。为了完成此任务,我们将运用大数据分析和机器学习建模技术,并......