类 ArithmeticUtils
java.lang.Object
org.hipparchus.util.ArithmeticUtils
Some useful, arithmetics related, additions to the built-in functions in
Math.
-
方法概要
修饰符和类型方法说明static intaddAndCheck(int x, int y) Add two integers, checking for overflow.static longaddAndCheck(long a, long b) Add two long integers, checking for overflow.static intdivideUnsigned(int dividend, int divisor) 返回将第一个参数除以第二个参数的无符号商,其中每个参数和结果都被解释为无符号值。static longdivideUnsigned(long dividend, long divisor) 返回将第一个参数除以第二个参数的无符号商,其中每个参数和结果都被解释为无符号值。static intgcd(int p, int q) 计算两个数字的绝对值的最大公约数,使用修改版的“二进制最大公约数”方法。static longgcd(long p, long q) 获取两个数字的绝对值的最大公约数,使用避免除法和取模运算的“二进制最大公约数”方法。static booleanisPowerOfTwo(long n) 如果参数是2的幂,则返回true。static intlcm(int a, int b) 返回两个数字的绝对值的最小公倍数,使用公式lcm(a,b) = (a / gcd(a,b)) * b。static longlcm(long a, long b) 返回两个数字的绝对值的最小公倍数,使用公式lcm(a,b) = (a / gcd(a,b)) * b。static intmulAndCheck(int x, int y) Multiply two integers, checking for overflow.static longmulAndCheck(long a, long b) Multiply two long integers, checking for overflow.static intpow(int k, int e) 将一个整数提高到一个整数幂。static longpow(long k, int e) 将一个长整数提高到一个整数幂。static BigIntegerpow(BigInteger k, int e) 将一个BigInteger提高到一个整数幂。static BigIntegerpow(BigInteger k, long e) 将一个BigInteger提高到一个长整数幂。static BigIntegerpow(BigInteger k, BigInteger e) 将一个BigInteger提高到一个BigInteger幂。static intremainderUnsigned(int dividend, int divisor) 返回将第一个参数除以第二个参数的无符号余数,其中每个参数和结果都被解释为无符号值。static longremainderUnsigned(long dividend, long divisor) 返回将第一个参数除以第二个参数的无符号余数,其中每个参数和结果都被解释为无符号值。static intsubAndCheck(int x, int y) Subtract two integers, checking for overflow.static longsubAndCheck(long a, long b) Subtract two long integers, checking for overflow.
-
方法详细资料
-
addAndCheck
Add two integers, checking for overflow.- 参数:
-
x- 被加数 -
y- 被加数 - 返回:
-
和
x+y - 抛出:
-
MathRuntimeException- 如果结果无法表示为int。
-
addAndCheck
Add two long integers, checking for overflow.- 参数:
-
a- 被加数 -
b- 被加数 - 返回:
-
和
a+b - 抛出:
-
MathRuntimeException- 如果结果无法表示为long
-
gcd
计算两个数字的绝对值的最大公约数,使用修改版的“二进制最大公约数”方法。参见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
获取两个数字的绝对值的最大公约数,使用避免除法和取模运算的“二进制最大公约数”方法。参见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
返回两个数字的绝对值的最小公倍数,使用公式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
返回两个数字的绝对值的最小公倍数,使用公式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
Multiply two integers, checking for overflow.- 参数:
-
x- 因子。 -
y- 因子。 - 返回:
-
乘积
x * y。 - 抛出:
-
MathRuntimeException- 如果结果无法表示为int。
-
mulAndCheck
Multiply two long integers, checking for overflow.- 参数:
-
a- 因子。 -
b- 因子。 - 返回:
-
乘积
a * b。 - 抛出:
-
MathRuntimeException- 如果结果无法表示为long。
-
subAndCheck
Subtract two integers, checking for overflow.- 参数:
-
x- 被减数。 -
y- 减数。 - 返回:
-
差
x - y。 - 抛出:
-
MathRuntimeException- 如果结果无法表示为int。
-
subAndCheck
Subtract two long integers, checking for overflow.- 参数:
-
a- 值。 -
b- 值。 - 返回:
-
差值
a - b。 - 抛出:
-
MathRuntimeException- 如果结果无法表示为long。
-
pow
将整数提升为整数幂。- 参数:
-
k- 要提升的数字。 -
e- 指数(必须为正数或零)。 - 返回:
- \( k^e \)
- 抛出:
-
MathIllegalArgumentException- 如果e < 0。 -
MathRuntimeException- 如果结果会溢出。
-
pow
将长整数提升为整数幂。- 参数:
-
k- 要提升的数字。 -
e- 指数(必须为正数或零)。 - 返回:
- \( k^e \)
- 抛出:
-
MathIllegalArgumentException- 如果e < 0。 -
MathRuntimeException- 如果结果会溢出。
-
pow
将BigInteger提升为整数幂。- 参数:
-
k- 要提升的数字。 -
e- 指数(必须为正数或零)。 - 返回:
- ke
- 抛出:
-
MathIllegalArgumentException- 如果e < 0。
-
pow
将BigInteger提升为长整数幂。- 参数:
-
k- 要提升的数字。 -
e- 指数(必须为正数或零)。 - 返回:
- ke
- 抛出:
-
MathIllegalArgumentException- 如果e < 0。
-
pow
将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- 除数 - 返回:
- 第一个参数除以第二个参数的无符号商。
-