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 long
divisor
long
numerator
boolean
unsignedType
-
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 double
doubleValue()
float
floatValue()
int
intValue()
long
longValue()
RationalNumber
negate()
Negates the value of the RationalNumber.String
toDisplayString()
String
toString()
static RationalNumber
valueOf(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:
doubleValue
in classNumber
-
floatValue
public float floatValue()
- Specified by:
floatValue
in 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
-
-