Class RationalNumber
- java.lang.Object
-
- java.lang.Number
-
- org.apache.commons.imaging.common.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 Summary
Fields Modifier and Type Field Description longdivisorlongnumeratorbooleanunsignedType
-
Constructor Summary
Constructors Constructor Description RationalNumber(int numerator, int divisor)Constructs an instance based on signed integersRationalNumber(int numerator, int divisor, boolean unsignedType)Constructs an instance supports either signed or unsigned integers.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description doubledoubleValue()floatfloatValue()intintValue()longlongValue()RationalNumbernegate()Negates the value of the RationalNumber.StringtoDisplayString()StringtoString()static RationalNumbervalueOf(double value)Calculate rational number using successive approximations.-
Methods inherited from class java.lang.Number
byteValue, shortValue
-
-
-
-
Constructor Detail
-
RationalNumber
public RationalNumber(int numerator, int divisor)Constructs an instance based on signed integers- Parameters:
numerator- a 32-bit signed integerdivisor- 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:
doubleValuein classNumber
-
floatValue
public float floatValue()
- Specified by:
floatValuein classNumber
-
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
-
-