Java.lang.Math包 和Java.lang.Number包

Math类

  • 它的直接父类是Object,被final修饰
     public final class Math extends Object
  • Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

  • 与 StrictMath 类的某些数学方法不同,并非 Math 类所有等价函数的实现都定义为返回逐位相同的结果。此类在不需要严格重复的地方可以得到更好的执行。

  • 默认情况下,很多 Math 方法仅调用 StrictMath 中的等价方法来完成它们的实现。建议代码生成器使用特定于平台的本机库或者微处理器指令(可用时)来提供 Math 方法更高性能的实现。这种更高性能的实现仍然必须遵守 Math 的规范。

  • 实现规范的质量涉及到两种属性,即返回结果的准确性和方法的单调性。浮点 Math 方法的准确性根据 ulp(units in the last place,最后一位的进退位)来衡量。对于给定的浮点格式,特定实数值的 ulp 是包括该数值的两个浮点值的差。当作为一个整体而不是针对具体参数讨论方法的准确性时,引入的 ulp 数用于任何参数最差情况下的误差。如果一个方法的误差总是小于 0.5 ulp,那么该方法始终返回最接近准确结果的浮点数;这种方法就是正确舍入。一个正确舍入的方法通常能得到最佳的浮点近似值;然而,对于许多浮点方法,进行正确舍入有些不切实际。相反,对于 Math 类,某些方法允许误差在 1 或 2 ulp 的范围内。非正式地,对于 1 ulp 的误差范围,当准确结果是可表示的数值时,应该按照计算结果返回准确结果;否则,返回包括准确结果的两个浮点值中的一个。对于值很大的准确结果,括号的一端可以是无穷大。除了个别参数的准确性之外,维护不同参数的方法之间的正确关系也很重要。因此,大多数误差大于 0.5 ulp 的方法都要求是半单调的:只要数学函数是非递减的,浮点近似值就是非递减的;同样,只要数学函数是非递增的,浮点近似值就是非递增的。并非所有准确性为 1 ulp 的近似值都能自动满足单调性要求。

字段摘要

  • static double E
    比任何其他值都更接近 e(即自然对数的底数)的 double 值。

  • static double PI
    比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。

  • 以上的E和PI均为常数,E就是2.71828…,PI就是π。-```

		double Value = Math.PI;
   	    System.out.println("π的值为:"+Value);//π的值为:3.141592653589793
   	    double eValue = Math.E;
   	    System.out.println("E的值为:"+eValue);//E的值为:2.718281828459045

方法摘要

  • static double abs(double a) 返回 double,float,int,long 值的绝对值。
        double s = Math.abs(-5);
		System.out.println("-5的绝对值为:"+s);//double s = Math.abs(-5);
  • static double acos(double a)
    返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。
    static double asin(double a)
    返回一个值的反正弦;返回的角度范围在 -pi/2 到 pi/2 之间。
    static double atan(double a)
    返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间。

  • static double cbrt(double a)
    返回 double 值的立方根。

  • static double exp(double a)
    返回欧拉数 e 的 double 次幂的值。

  • static double log(double a)
    返回 double 值的自然对数(底数是 e)。

	double b = Math.log(5);
    System.err.println("以e为底,5的对数是:"+b);
  • static double max(double a, double b)
    返回两个 double 值中较大的一个。
    static float max(float a, float b)
    返回两个 float 值中较大的一个。
    static int max(int a, int b)
    返回两个 int 值中较大的一个。
    static long max(long a, long b)
    返回两个 long 值中较大的一个。
    static double min(double a, double b)
    返回两个 double 值中较小的一个。
    static float min(float a, float b)
    返回两个 float 值中较小的一个。
    static int min(int a, int b)
    返回两个 int 值中较小的一个。
    static long min(long a, long b)
    返回两个 long 值中较小的一个。
  • static double random() (常用方法)
    返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
  • static double pow(double a, double b)
    返回第一个参数的第二个参数次幂的值。

Number类

  • 直接已知子类:
    AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short

  • 重点介绍BigDecimal类

  • public class BigDecimalextends Numberimplements Comparable不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。

  • BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。

  • BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext 对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP)的枚举值。

  • 当为 MathContext 对象提供 0 的精度设置(例如,MathContext.UNLIMITED)时,算术运算是准确的,它们是不采用任何 MathContext 对象的算术方法。(这是第 5 版之前的版本支持的唯一行为。)为了计算准确结果,不使用附带 0 精度设置的 MathContext 对象的舍入模式设置,因此与该对象无关。在除法中,准确的商可能是一个无限长的十进制扩展;例如,1 除以 3 所得的商。如果商具有无穷的十进制扩展,但是指定了该操作返回准确结果,则抛出 ArithmeticException。否则,像其他操作那样,返回除法运算的准确结果。

  • 当精度设置不为 0 时,BigDecimal 算法的规则完全符合 ANSI X3.274-1996 和 ANSI X3.274-1996/AM 1-2000( 7.4 节)中定义的算法的可选操作模式。与上述标准不同,BigDecimal 包括多种舍入模式,它们对于版本 5 以前的 BigDecimal 版本中的除法是强制性的。这些 ANSI 标准和 BigDecimal 规范之间的任何冲突都按照有利于 BigDecimal 的方式进行解决。

  • 由于同一数值可以有不同的表示形式(具有不同的标度),因此运算和舍入的规则必须同时指定数值结果和结果表示形式中所用的标度。

  • 般情况下,当准确结果(在除法中,可能有无限多位)比返回的数值具有更多位数时,舍入模式和精度设置确定操作如何返回具有有限位数的结果。 首先,MathContext 的 precision 设置指定要返回的总位数;这确定了结果的精度。位数计数从准确结果的最左边的非零数字开始。舍入模式确定丢弃的尾部位数如何影响返回的结果。

  • 对于所有算术运算符,运算的执行方式是,首先计算准确的中间结果,然后,使用选择的舍入模式将其舍入为精度设置(如有必要)指定的位数。如果不返回准确结果,则将丢弃准确结果的某些数位。当舍入增加了返回结果的大小时,前导数字“9”的进位传播可能会创建新的数位。例如,将值 999.9 舍入为三位数字,则在数值上等于一千,表示为 100×101。在这种情况下,新的 “1” 是返回结果的前导数位。

  • 除了逻辑的准确结果外,每种算术运算都有一个表示结果的首选标度。下表列出了每个运算的首选标度。

字段摘要

  • static BigDecimal ONE 值为 1,标度为 0。

  • static int ROUND_CEILING 接近正无穷大的舍入模式。

  • static int ROUND_DOWN 接近零的舍入模式。

  • static int ROUND_FLOOR 接近负无穷大的舍入模式。

  • static int ROUND_HALF_DOWN
    向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

  • static int ROUND_HALF_EVEN
    向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

  • static int ROUND_HALF_UP
    向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

  • static int ROUND_UNNECESSARY
    断言请求的操作具有精确的结果,因此不需要舍入。

  • static int ROUND_UP 舍入远离零的舍入模式。

  • static BigDecimal TEN 值为 10,标度为 0。

  • static BigDecimal ZERO 值为 0,标度为 0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值