程序包 org.hipparchus.util

类 ArithmeticUtils

java.lang.Object
org.hipparchus.util.ArithmeticUtils

public final class ArithmeticUtils extends Object
Some useful, arithmetics related, additions to the built-in functions in Math.
  • 方法概要

    修饰符和类型
    方法
    说明
    static int
    addAndCheck(int x, int y)
    Add two integers, checking for overflow.
    static long
    addAndCheck(long a, long b)
    Add two long integers, checking for overflow.
    static int
    divideUnsigned(int dividend, int divisor)
    返回将第一个参数除以第二个参数的无符号商,其中每个参数和结果都被解释为无符号值。
    static long
    divideUnsigned(long dividend, long divisor)
    返回将第一个参数除以第二个参数的无符号商,其中每个参数和结果都被解释为无符号值。
    static int
    gcd(int p, int q)
    计算两个数字的绝对值的最大公约数,使用修改版的“二进制最大公约数”方法。
    static long
    gcd(long p, long q)
    获取两个数字的绝对值的最大公约数,使用避免除法和取模运算的“二进制最大公约数”方法。
    static boolean
    isPowerOfTwo(long n)
    如果参数是2的幂,则返回true。
    static int
    lcm(int a, int b)
    返回两个数字的绝对值的最小公倍数,使用公式lcm(a,b) = (a / gcd(a,b)) * b
    static long
    lcm(long a, long b)
    返回两个数字的绝对值的最小公倍数,使用公式lcm(a,b) = (a / gcd(a,b)) * b
    static int
    mulAndCheck(int x, int y)
    Multiply two integers, checking for overflow.
    static long
    mulAndCheck(long a, long b)
    Multiply two long integers, checking for overflow.
    static int
    pow(int k, int e)
    将一个整数提高到一个整数幂。
    static long
    pow(long k, int e)
    将一个长整数提高到一个整数幂。
    static BigInteger
    pow(BigInteger k, int e)
    将一个BigInteger提高到一个整数幂。
    static BigInteger
    pow(BigInteger k, long e)
    将一个BigInteger提高到一个长整数幂。
    static BigInteger
    将一个BigInteger提高到一个BigInteger幂。
    static int
    remainderUnsigned(int dividend, int divisor)
    返回将第一个参数除以第二个参数的无符号余数,其中每个参数和结果都被解释为无符号值。
    static long
    remainderUnsigned(long dividend, long divisor)
    返回将第一个参数除以第二个参数的无符号余数,其中每个参数和结果都被解释为无符号值。
    static int
    subAndCheck(int x, int y)
    Subtract two integers, checking for overflow.
    static long
    subAndCheck(long a, long b)
    Subtract two long integers, checking for overflow.

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 方法详细资料

    • addAndCheck

      public static int addAndCheck(int x, int y) throws MathRuntimeException
      Add two integers, checking for overflow.
      参数:
      x - 被加数
      y - 被加数
      返回:
      x+y
      抛出:
      MathRuntimeException - 如果结果无法表示为int
    • addAndCheck

      public static long addAndCheck(long a, long b) throws MathRuntimeException
      Add two long integers, checking for overflow.
      参数:
      a - 被加数
      b - 被加数
      返回:
      a+b
      抛出:
      MathRuntimeException - 如果结果无法表示为long
    • gcd

      public static int gcd(int p, int q) throws MathRuntimeException
      计算两个数字的绝对值的最大公约数,使用修改版的“二进制最大公约数”方法。参见Knuth 4.5.2算法B。该算法归因于Josef Stein(1961年)。
      特殊情况:
      • 调用gcd(Integer.MIN_VALUE, Integer.MIN_VALUE)gcd(Integer.MIN_VALUE, 0)gcd(0, Integer.MIN_VALUE)会抛出ArithmeticException,因为结果将是2^31,这对于int值来说太大了。
      • gcd(x, x)gcd(0, x)gcd(x, 0)的结果是x的绝对值,除了上述特殊情况。
      • 调用gcd(0, 0)是唯一返回0的情况。
      参数:
      p - 数字。
      q - 数字。
      返回:
      最大公约数(永不为负)。
      抛出:
      MathRuntimeException - 如果结果无法表示为非负的int值。
    • gcd

      public static long gcd(long p, long q) throws MathRuntimeException
      获取两个数字的绝对值的最大公约数,使用避免除法和取模运算的“二进制最大公约数”方法。参见Knuth 4.5.2算法B。该算法归因于Josef Stein(1961年)。

      特殊情况:

      • 调用gcd(Long.MIN_VALUE, Long.MIN_VALUE)gcd(Long.MIN_VALUE, 0L)gcd(0L, Long.MIN_VALUE)会抛出ArithmeticException,因为结果将是2^63,这对于long值来说太大了。
      • gcd(x, x)gcd(0L, x)gcd(x, 0L)的结果是x的绝对值,除了上述特殊情况。
      • 调用gcd(0L, 0L)是唯一返回0L的情况。
      参数:
      p - 数字。
      q - 数字。
      返回:
      最大公约数,永不为负。
      抛出:
      MathRuntimeException - 如果结果无法表示为非负的long值。
    • lcm

      public static int lcm(int a, int b) throws MathRuntimeException
      返回两个数字的绝对值的最小公倍数,使用公式lcm(a,b) = (a / gcd(a,b)) * b

      特殊情况:

      • 调用lcm(Integer.MIN_VALUE, n)lcm(n, Integer.MIN_VALUE),其中abs(n)是2的幂,会抛出ArithmeticException,因为结果将是2^31,这对于int值来说太大了。
      • lcm(0, x)lcm(x, 0)的结果对于任何x都是0
      参数:
      a - 数字。
      b - 数字。
      返回:
      最小公倍数,永不为负。
      抛出:
      MathRuntimeException - 如果结果无法表示为非负的int值。
    • lcm

      public static long lcm(long a, long b) throws MathRuntimeException
      返回两个数字的绝对值的最小公倍数,使用公式lcm(a,b) = (a / gcd(a,b)) * b

      特殊情况:

      • 调用lcm(Long.MIN_VALUE, n)lcm(n, Long.MIN_VALUE),其中abs(n)是2的幂,会抛出ArithmeticException,因为结果将是2^63,这对于int值来说太大了。
      • lcm(0L, x)lcm(x, 0L)的结果对于任何x都是0L
      参数:
      a - 数字。
      b - 数字。
      返回:
      最小公倍数,永不为负。
      抛出:
      MathRuntimeException - 如果结果无法表示为非负的long值。
    • mulAndCheck

      public static int mulAndCheck(int x, int y) throws MathRuntimeException
      Multiply two integers, checking for overflow.
      参数:
      x - 因子。
      y - 因子。
      返回:
      乘积x * y
      抛出:
      MathRuntimeException - 如果结果无法表示为int
    • mulAndCheck

      public static long mulAndCheck(long a, long b) throws MathRuntimeException
      Multiply two long integers, checking for overflow.
      参数:
      a - 因子。
      b - 因子。
      返回:
      乘积a * b
      抛出:
      MathRuntimeException - 如果结果无法表示为long
    • subAndCheck

      public static int subAndCheck(int x, int y) throws MathRuntimeException
      Subtract two integers, checking for overflow.
      参数:
      x - 被减数。
      y - 减数。
      返回:
      x - y
      抛出:
      MathRuntimeException - 如果结果无法表示为int
    • subAndCheck

      public static long subAndCheck(long a, long b) throws MathRuntimeException
      Subtract two long integers, checking for overflow.
      参数:
      a - 值。
      b - 值。
      返回:
      差值 a - b
      抛出:
      MathRuntimeException - 如果结果无法表示为 long
    • pow

      public static int pow(int k, int e) throws MathIllegalArgumentException, MathRuntimeException
      将整数提升为整数幂。
      参数:
      k - 要提升的数字。
      e - 指数(必须为正数或零)。
      返回:
      \( k^e \)
      抛出:
      MathIllegalArgumentException - 如果 e < 0
      MathRuntimeException - 如果结果会溢出。
    • pow

      public static long pow(long k, int e) throws MathIllegalArgumentException, MathRuntimeException
      将长整数提升为整数幂。
      参数:
      k - 要提升的数字。
      e - 指数(必须为正数或零)。
      返回:
      \( k^e \)
      抛出:
      MathIllegalArgumentException - 如果 e < 0
      MathRuntimeException - 如果结果会溢出。
    • pow

      public static BigInteger pow(BigInteger k, int e) throws MathIllegalArgumentException
      将BigInteger提升为整数幂。
      参数:
      k - 要提升的数字。
      e - 指数(必须为正数或零)。
      返回:
      ke
      抛出:
      MathIllegalArgumentException - 如果 e < 0
    • pow

      public static BigInteger pow(BigInteger k, long e) throws MathIllegalArgumentException
      将BigInteger提升为长整数幂。
      参数:
      k - 要提升的数字。
      e - 指数(必须为正数或零)。
      返回:
      ke
      抛出:
      MathIllegalArgumentException - 如果 e < 0
    • pow

      public static BigInteger pow(BigInteger k, BigInteger e) throws MathIllegalArgumentException
      将BigInteger提升为BigInteger幂。
      参数:
      k - 要提升的数字。
      e - 指数(必须为正数或零)。
      返回:
      ke
      抛出:
      MathIllegalArgumentException - 如果 e < 0
    • isPowerOfTwo

      public static boolean isPowerOfTwo(long n)
      如果参数是2的幂,则返回true。
      参数:
      n - 要测试的数字
      返回:
      如果参数是2的幂,则返回true
    • remainderUnsigned

      public static int remainderUnsigned(int dividend, int divisor)
      返回将第一个参数除以第二个参数得到的无符号余数,其中每个参数和结果都被解释为无符号值。

      此方法不使用 long 数据类型。

      参数:
      dividend - 被除数
      divisor - 除数
      返回:
      第一个参数除以第二个参数的无符号余数。
    • remainderUnsigned

      public static long remainderUnsigned(long dividend, long divisor)
      返回将第一个参数除以第二个参数得到的无符号余数,其中每个参数和结果都被解释为无符号值。

      此方法不使用 BigInteger 数据类型。

      参数:
      dividend - 被除数
      divisor - 除数
      返回:
      第一个参数除以第二个参数的无符号余数。
    • divideUnsigned

      public static int divideUnsigned(int dividend, int divisor)
      返回将第一个参数除以第二个参数得到的无符号商,其中每个参数和结果都被解释为无符号值。

      请注意,在二进制补码算术中,如果两个操作数被视为都是有符号的或都是无符号的,则加法、减法和乘法的三种其他基本算术运算在位级上是相同的。因此,如果两个操作数被视为都是有符号的或都是无符号的,则不提供单独的 addUnsigned 等方法。

      此方法不使用 long 数据类型。

      参数:
      dividend - 被除数
      divisor - 除数
      返回:
      第一个参数除以第二个参数的无符号商
    • divideUnsigned

      public static long divideUnsigned(long dividend, long divisor)
      返回将第一个参数除以第二个参数得到的无符号商,其中每个参数和结果都被解释为无符号值。

      请注意,在二进制补码算术中,如果两个操作数被视为都是有符号的或都是无符号的,则加法、减法和乘法的三种其他基本算术运算在位级上是相同的。因此,如果两个操作数被视为都是有符号的或都是无符号的,则不提供单独的 addUnsigned 等方法。

      此方法不使用 BigInteger 数据类型。

      参数:
      dividend - 被除数
      divisor - 除数
      返回:
      第一个参数除以第二个参数的无符号商。