类 ArithmeticUtils
java.lang.Object
org.hipparchus.util.ArithmeticUtils
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
pow
(BigInteger k, BigInteger e) 将一个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.
-
方法详细资料
-
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
- 除数 - 返回:
- 第一个参数除以第二个参数的无符号商。
-