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 long
final long
static final int
final 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 TypeMethodDescriptiondouble
float
int
intValue()
long
negate()
Negates the value of the RationalNumber.toString()
static RationalNumber
valueOf
(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:
doubleValue
in classNumber
-
floatValue
- Specified by:
floatValue
in 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
-