程序包 org.hipparchus.util

类 MathUtils

java.lang.Object
org.hipparchus.util.MathUtils

public final class MathUtils extends Object
杂项实用功能。
另请参阅:
  • 字段详细资料

    • TWO_PI

      public static final double TWO_PI
      \(2\pi\)
      另请参阅:
    • PI_SQUARED

      public static final double PI_SQUARED
      \(\pi^2\)
      另请参阅:
    • SEMI_PI

      public static final double SEMI_PI
      \(\pi/2\).
      另请参阅:
  • 方法详细资料

    • hash

      public static int hash(double value)
      返回表示给定双精度值的整数哈希码。
      参数:
      value - 要进行哈希处理的值
      返回:
      哈希码
    • equals

      public static boolean equals(double x, double y)
      如果值根据Double.equals(Object)的语义相等,则返回true
      参数:
      x - 值
      y - 值
      返回:
      Double.valueOf(x).equals(Double.valueOf(y))
    • hash

      public static int hash(double[] value)
      返回表示给定双精度数组的整数哈希码。
      参数:
      value - 要进行哈希处理的值(可以为null)
      返回:
      哈希码
    • normalizeAngle

      public static double normalizeAngle(double a, double center)
      将角度标准化在围绕中心值的2π宽区间内。

      此方法有三个主要用途:

      • 将角度标准化在0和2π之间:
        a = MathUtils.normalizeAngle(a, FastMath.PI);
      • 将角度标准化在-π和+π之间
        a = MathUtils.normalizeAngle(a, 0.0);
      • 计算两个定义角位置之间的角度:
        angle = MathUtils.normalizeAngle(end, start) - start;

      请注意,由于数值精度和因为π无法精确表示,结果区间是闭合的,它不能是半闭合的,这在纯数学视角下可能更令人满意。

      参数:
      a - 要标准化的角度
      center - 结果的所需2π区间的中心
      返回:
      a-2kπ,其中k为整数,且center-π <= a-2kπ <= center+π
    • normalizeAngle

      public static <T extends CalculusFieldElement<T>> T normalizeAngle(T a, T center)
      将角度标准化在围绕中心值的2π宽区间内。

      此方法有三个主要用途:

      • 将角度标准化在0和2π之间:
        a = MathUtils.normalizeAngle(a, FastMath.PI);
      • 将角度标准化在-π和+π之间
        a = MathUtils.normalizeAngle(a, zero);
      • 计算两个定义角位置之间的角度:
        angle = MathUtils.normalizeAngle(end, start).subtract(start);

      请注意,由于数值精度和因为π无法精确表示,结果区间是闭合的,它不能是半闭合的,这在纯数学视角下可能更令人满意。

      类型参数:
      T - 字段元素的类型
      参数:
      a - 要标准化的角度
      center - 结果的所需2π区间的中心
      返回:
      a-2kπ,其中k为整数,且center-π <= a-2kπ <= center+π
    • max

      public static <T extends CalculusFieldElement<T>> T max(T e1, T e2)
      找到两个字段元素的最大值。
      类型参数:
      T - 字段元素的类型
      参数:
      e1 - 第一个元素
      e2 - 第二个元素
      返回:
      max(a1, e2)
    • min

      public static <T extends CalculusFieldElement<T>> T min(T e1, T e2)
      找到两个字段元素的最小值。
      类型参数:
      T - 字段元素的类型
      参数:
      e1 - 第一个元素
      e2 - 第二个元素
      返回:
      min(a1, e2)
    • reduce

      public static double reduce(double a, double period, double offset)

      |a - offset|减少到主要区间[0, |period|)

      具体地,返回的值为
      a - |period| * floor((a - offset) / |period|) - offset

      如果任何参数为NaN或无穷大,则结果为NaN

      参数:
      a - 要减少的值。
      period - 周期。
      offset - 将映射为0的值。
      返回:
      a对应于区间[0 |period|)内的值。
    • copySign

      public static byte copySign(byte magnitude, byte sign) throws MathRuntimeException
      返回第一个参数,其符号与第二个参数相同。
      参数:
      magnitude - 返回值的大小。
      sign - 返回值的符号。
      返回:
      一个具有大小等于magnitude且与sign参数相同符号的值。
      抛出:
      MathRuntimeException - 如果magnitude == Byte.MIN_VALUEsign >= 0
    • copySign

      public static short copySign(short magnitude, short sign) throws MathRuntimeException
      返回第一个参数,其符号与第二个参数相同。
      参数:
      magnitude - 返回值的大小。
      sign - 返回值的符号。
      返回:
      一个具有大小等于magnitude且与sign参数相同符号的值。
      抛出:
      MathRuntimeException - 如果magnitude == Short.MIN_VALUEsign >= 0
    • copySign

      public static int copySign(int magnitude, int sign) throws MathRuntimeException
      返回第一个参数,其符号与第二个参数相同。
      参数:
      magnitude - 返回值的大小。
      sign - 返回值的符号。
      返回:
      具有大小等于magnitude且符号与sign参数相同的值。
      抛出:
      MathRuntimeException - 如果magnitude == Integer.MIN_VALUEsign >= 0
    • copySign

      public static long copySign(long magnitude, long sign) throws MathRuntimeException
      返回具有第二个参数符号的第一个参数。
      参数:
      magnitude - 返回值的大小。
      sign - 返回值的符号。
      返回:
      具有大小等于magnitude且符号与sign参数相同的值。
      抛出:
      MathRuntimeException - 如果magnitude == Long.MIN_VALUEsign >= 0
    • checkFinite

      public static void checkFinite(double x) throws MathIllegalArgumentException
      检查参数是否为实数。
      参数:
      x - 参数。
      抛出:
      MathIllegalArgumentException - 如果x不是有限实数。
    • checkFinite

      public static void checkFinite(double[] val) throws MathIllegalArgumentException
      检查所有元素是否为实数。
      参数:
      val - 参数。
      抛出:
      MathIllegalArgumentException - 如果数组中的任何值不是有限实数。
    • checkNotNull

      public static void checkNotNull(Object o, Localizable pattern, Object... args) throws NullArgumentException
      检查对象不为空。
      参数:
      o - 要检查的对象。
      pattern - 消息模式。
      args - 用于替换pattern中占位符的参数。
      抛出:
      NullArgumentException - 如果onull
    • checkNotNull

      public static void checkNotNull(Object o) throws NullArgumentException
      检查对象不为空。
      参数:
      o - 要检查的对象。
      抛出:
      NullArgumentException - 如果onull
    • checkRangeInclusive

      public static void checkRangeInclusive(long value, long lo, long hi)
      检查给定值严格在范围[lo, hi]内。
      参数:
      value - 要检查的值。
      lo - 下限(包括)。
      hi - 上限(包括)。
      抛出:
      MathIllegalArgumentException - 如果value严格在[lo, hi]之外。
    • checkRangeInclusive

      public static void checkRangeInclusive(double value, double lo, double hi)
      检查给定值严格在范围[lo, hi]内。
      参数:
      value - 要检查的值。
      lo - 下限(包括)。
      hi - 上限(包括)。
      抛出:
      MathIllegalArgumentException - 如果value严格在[lo, hi]之外。
    • checkDimension

      public static void checkDimension(int dimension, int otherDimension)
      检查给定维度是否匹配。
      参数:
      dimension - 第一个维度。
      otherDimension - 第二个维度。
      抛出:
      MathIllegalArgumentException - 如果长度!= otherLength。
    • twoSum

      public static MathUtils.SumAndResidual twoSum(double a, double b)
      使用Møller的2Sum算法对ab进行求和。

      参考资料:

      • Møller, Ole. "Quasi double-precision in floating point addition." BIT 5, 37–50 (1965).
      • Shewchuk, Richard J. "Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates." Discrete & Computational Geometry 18, 305–363 (1997).
      • https://en.wikipedia.org/wiki/2Sum
      参数:
      a - 第一个加数
      b - 第二个加数
      返回:
      和及和的剩余误差
    • twoSum

      public static <T extends FieldElement<T>> MathUtils.FieldSumAndResidual<T> twoSum(T a, T b)
      使用Møller的2Sum算法对ab进行求和。

      参考资料:

      • Møller, Ole. "Quasi double-precision in floating point addition." BIT 5, 37–50 (1965).
      • Shewchuk, Richard J. "Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates." Discrete & Computational Geometry 18, 305–363 (1997).
      • https://en.wikipedia.org/wiki/2Sum
      类型参数:
      T - 字段元素类型
      参数:
      a - 第一个加数
      b - 第二个加数
      返回:
      和及和的剩余误差