Class RationalConverter

java.lang.Object
org.episteme.core.measure.converters.RationalConverter
All Implemented Interfaces:
UnitConverter

public final class RationalConverter extends Object implements UnitConverter

This class represents a converter multiplying numeric values by an exact scaling factor (represented as the quotient of two long numbers).

Instances of this class are immutable.

Since:
1.0
Author:
Silvere Martin-Michiellot
  • Constructor Details

    • RationalConverter

      public RationalConverter(long dividend, long divisor)
      Creates a rational converter with the specified dividend and divisor.
      Parameters:
      dividend - the dividend.
      divisor - the positive divisor.
      Throws:
      IllegalArgumentException - if divisor < 0
      IllegalArgumentException - if dividend == divisor
  • Method Details

    • getDividend

      public long getDividend()
      Returns the dividend for this rational converter.
      Returns:
      this converter dividend.
    • getDivisor

      public long getDivisor()
      Returns the positive divisor for this rational converter.
      Returns:
      this converter divisor.
    • inverse

      public UnitConverter inverse()
      Description copied from interface: UnitConverter
      Returns the inverse of this converter.

      The inverse converter performs the reverse transformation.

      Specified by:
      inverse in interface UnitConverter
      Returns:
      the inverse converter
    • convert

      public Real convert(Real value)
      Description copied from interface: UnitConverter
      Converts a value from the source unit to the target unit.
      Specified by:
      convert in interface UnitConverter
      Parameters:
      value - the value to convert
      Returns:
      the converted value
    • isLinear

      public boolean isLinear()
      Description copied from interface: UnitConverter
      Checks if this converter is linear (scale only, no offset).

      Linear converters satisfy: f(x + y) = f(x) + f(y) and f(ax) = aâ‹…f(x).

      Specified by:
      isLinear in interface UnitConverter
      Returns:
      true if this converter is linear
    • isIdentity

      public boolean isIdentity()
      Description copied from interface: UnitConverter
      Checks if this converter is an identity converter (no conversion).
      Specified by:
      isIdentity in interface UnitConverter
      Returns:
      true if this is the identity converter
    • derivative

      public Real derivative(Real value)
      Description copied from interface: UnitConverter
      Returns the derivative of the conversion function at the given value.

      For linear converters, this is constant. For affine converters (like temperature), this is also constant.

      Specified by:
      derivative in interface UnitConverter
      Parameters:
      value - the value at which to evaluate the derivative
      Returns:
      the derivative (conversion rate)
    • concatenate

      public UnitConverter concatenate(UnitConverter converter)
      Description copied from interface: UnitConverter
      Returns a converter that first applies this converter, then the other.

      For example, if this converts meters to feet and other converts feet to miles, the result converts meters to miles.

      Specified by:
      concatenate in interface UnitConverter
      Parameters:
      converter - the converter to apply after this one
      Returns:
      the concatenated converter