Class RationalNumber

  • All Implemented Interfaces:
    Serializable

    public class RationalNumber
    extends Number
    Rational number, as used by the TIFF image format.

    The TIFF format specifies two data types for rational numbers based on a pair of 32-bit integers. Rational is based on unsigned 32-bit integers and SRational is based on signed 32-bit integers. This treatment is problematic in Java because Java does not support unsigned types. To address this challenge, this class stores the numerator and divisor in long (64-bit) integers, applying masks as necessary for the unsigned type.

    See Also:
    Serialized Form
    • Field Detail

      • numerator

        public final long numerator
      • divisor

        public final long divisor
      • unsignedType

        public final boolean unsignedType
    • Constructor Detail

      • RationalNumber

        public RationalNumber​(int numerator,
                              int divisor)
        Constructs an instance based on signed integers
        Parameters:
        numerator - a 32-bit signed integer
        divisor - a non-zero 32-bit signed integer
      • RationalNumber

        public RationalNumber​(int numerator,
                              int divisor,
                              boolean unsignedType)
        Constructs an instance supports either signed or unsigned integers.
        Parameters:
        numerator - a numerator in the indicated form (signed or unsigned)
        divisor - a non-zero divisor in the indicated form (signed or unsigned)
        unsignedType - indicates whether the input values are to be treated as unsigned.
    • Method Detail

      • negate

        public RationalNumber negate()
        Negates the value of the RationalNumber. If the numerator of this instance has its high-order bit set, then its value is too large to be treated as a Java 32-bit signed integer. In such a case, the only way that a RationalNumber instance can be negated is to divide both terms by a common divisor, if a non-zero common divisor exists. However, if no such divisor exists, there is no numerically correct way to perform the negation. When a negation cannot be performed correctly, this method throws an unchecked exception.
        Returns:
        a valid instance with a negated value.
      • doubleValue

        public double doubleValue()
        Specified by:
        doubleValue in class Number
      • floatValue

        public float floatValue()
        Specified by:
        floatValue in class Number
      • intValue

        public int intValue()
        Specified by:
        intValue in class Number
      • longValue

        public long longValue()
        Specified by:
        longValue in class Number
      • toDisplayString

        public String toDisplayString()
      • valueOf

        public static RationalNumber valueOf​(double value)
        Calculate rational number using successive approximations.
        Parameters:
        value - rational number double value
        Returns:
        the RationalNumber representation of the double value