Class RationalNumber
java.lang.Object
java.lang.Number
org.apache.commons.imaging.common.RationalNumber
- All Implemented Interfaces:
Serializable
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:
-
Field Summary
FieldsModifier and TypeFieldDescriptionfinal longfinal longstatic final intfinal boolean -
Constructor Summary
ConstructorsConstructorDescriptionRationalNumber(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
Modifier and TypeMethodDescriptiondoublefloatintintValue()longnegate()Negates the value of the RationalNumber.toString()static RationalNumbervalueOf(double value) Calculate rational number using successive approximations.Methods inherited from class java.lang.Number
byteValue, shortValue
-
Field Details
-
SHALLOW_SIZE
- See Also:
-
numerator
-
divisor
-
unsignedType
-
-
Constructor Details
-
RationalNumber
Constructs an instance based on signed integers- Parameters:
numerator- a 32-bit signed integerdivisor- a non-zero 32-bit signed integer
-
RationalNumber
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 Details
-
valueOf
Calculate rational number using successive approximations.- Parameters:
value- rational number double value- Returns:
- the RationalNumber representation of the double value
-
doubleValue
- Specified by:
doubleValuein classNumber
-
floatValue
- Specified by:
floatValuein classNumber
-
intValue
-
longValue
-
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.
-
toDisplayString
-
toString
-