Class Quadruple
- All Implemented Interfaces:
Serializable, Comparable<Quadruple>
QuadrupleParser. I have also made the class thread-safe by wrapping the working
buffers around with a ThreadLocal.
Original code by M. Vokhmentsev, see this repository.
A floating-point number with a 128-bit fractional part of the mantissa and 32-bit
exponent. Normal values range from approximately 2.271e-646456993
to 1.761e+646456993 with precision not worse than 1,469368e-39
(2^-129, half the less significant bit).
Like standard double, it can store and process subnormal values,
with lower precision. The subnormal values range from 6.673e-646457032
to 2.271e-646456993, they use less than 129 bits of the mantissa and their
precision depends on the number of used bits, the less the value the worst the precision.
Implements conversions from/to other numeric types, conversions from/to strings, formatting, arithmetic operations and square root.
Instances are mutable, a.add(2) changes the value of a so that it becomes
a + 2, and a number of assign() methods with different types of arguments
replace the old value with the new one, converted from the argument value.
For arithmetic operations, there provided both instance methods that modify the value of the instance, and static methods that return new instances with resulting values without changing the operands. A value of any numeric type may be used as an argument (the second one for static methods) in arithmetic operations. All the methods implementing arithmetic operations and assignments allow for chaining, so that one can write
a = a.add(2).multiply(5).divide(3);
to compute
a = (a + 2) * 5 / 3.
An instance internally contains boolean flag for the value's sign,
32-bit (an int) of binary exponent, and 128 bits (2 longs) of fractional part of the mantissa.
Like with usual floating-point formats (e.g. standard Java double), the most significant
bit of the mantissa is not stored explicitly and the exponent is biased.
The biased exponent values stored in the exponent field are as following:
| biased value | const name | means | unbiased exponent (power of 2) |
|---|---|---|---|
0x0000_0000 |
EXPONENT_OF_SUBNORMAL |
subnormal values | 0x8000_0001 = -2147483647 = Integer.MIN_VALUE + 1 |
0x0000_0001 |
EXPONENT_OF_MIN_NORMAL |
MIN_NORMAL |
0x8000_0002 = -2147483646 = Integer.MIN_VALUE + 2 |
0x7FFF_FFFE |
-1 |
0xFFFF_FFFF |
|
0x7FFF_FFFF |
EXPONENT_OF_ONE |
0 |
0x0000_0000 |
0x8000_0000 |
1 |
0x0000_0001 |
|
0xFFFF_FFFE |
EXPONENT_OF_MAX_VALUE |
MAX_VALUE |
0x7fff_ffff = 2147483647 = Integer.MAX_VALUE |
0xFFFF_FFFF |
EXPONENT_OF_INFINITY |
Infinity |
0x8000_0000 = 2147483648 = Integer.MIN_VALUE |
The boundaries of the range are:
MAX_VALUE: 2^2147483647 * (2 - 2^-128) =
= 1.76161305168396335320749314979184028566452310e+646456993
MIN_NORMAL: 2^-2147483646 =
= 2.27064621040149253752656726517958758124747730e-646456993
MIN_VALUE: 2^-2147483774 =
= 6.67282948260747430814835377499134611597699952e-646457032
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intThe value of the exponent (biased) corresponding to1.0 == 2^0; equals to 2_147_483_647 (0x7FFF_FFFF) The same asEXPONENT_OF_ONEstatic final intThe value of the exponent (biased), corresponding toInfinity,-Infinity, andNaN; equals to -1 (0xFFFF_FFFF)static final longThe value of the exponent (biased), corresponding toMAX_VALUE; equals to 4_294_967_294L (0xFFFF_FFFEL)static final intThe value of the exponent (biased) corresponding to1.0 == 2^0; equals to 2_147_483_647 (0x7FFF_FFFF). -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new instance ofQuadruplewith value 0.0Quadruple(boolean negative, int exponent, long mantHi, long mantLo) Creates a newQuadruplebuilt from the given parts.Quadruple(double dValue) Creates a newQuadrupleinstance with the givendoublevalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(double).Quadruple(int exponent, long mantHi, long mantLo) Creates a newQuadruplewith a positive value built from the given parts.Quadruple(long lValue) Creates a newQuadruplewith the givenlongvalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(long).Creates a newQuadrupleinstance with the value of the givenQuadrupleinstance.
First creates an empty (zero) instance, then copies the fields of the parameter.Creates a newQuadruplewith the value represented by the givenString.
First creates an empty (zero) instance, then assigns the given value to the new instance, converting the string to the corresponding floating-point value. -
Method Summary
Modifier and TypeMethodDescriptionabs()Returns a new instance ofQuadruplewith the value of the absolute value of this instanceadd(double summand) Adds the value of the givendoublesummand to the value of this Quadruple.add(long summand) Adds the value of the givenlongsummand to the value of this Quadruple.Adds the value of the givenQuadruplesummand to the value of this Quadruple.static QuadrupleAdds the value of the givendouble op2to the value ofQuadruple op1and creates a new instance of Quadruple containing the sum.static QuadrupleAdds the value of the givenlong op2to the value ofQuadruple op1and creates a new instance of Quadruple containing the sum.static QuadrupleAdds the value of the givenQuadruple op2to the value ofQuadruple op1and creates a new instance of Quadruple containing the sum.assign(double value) Converts the given value to quadruple and assigns it to the instance.
Expands exponent to 32 bits preserving its value, and expands mantissa to 128 bits, filling with zeroes the least significant 76 bits that absent in the double value.assign(long value) Converts the given value to quadruple and assigns it to the instance.
To find the mantissa, shifts the bits of the absolute value of the parameter left, so that its most significant non-zero bit (that stands for the 'implicit unity' of the floating point formats) gets shifted out, then corrects the exponent depending on the shift distance and sets the sign in accordance with the initial sign of the parameter.Assigns the given value to the instance (copies the values of the private fields of the parameter to the respective fields of this instance).Parses the given String that is expected to contain floating-point value in any conventional string form or a string designation of one of special values, and assigns the corresponding value to the instance.
Parsing is case-insensitive.
The admittable string designations for special values are the following: "Quadruple.MIN_VALUE", "MIN_VALUE", "Quadruple.MAX_VALUE", "MAX_VALUE", "Quadruple.MIN_NORMAL", "MIN_NORMAL", "Quadruple.NaN", "NaN", "Quadruple.NEGATIVE_INFINITY", "NEGATIVE_INFINITY", "-INFINITY", "Quadruple.POSITIVE_INFINITy", "POSITIVE_INFINITY", "INFINITY", "+INFINITY".
If the exact value of the number represented by the input string is greater than the nearest exactQuadruplevalue by less than0.5 - 1e-17of the least significant bit of the mantissa of the latter, it gets rounded down to the aforementionedQuadruplevalue.
If it is greater by 0.5 LSB or more, it gets rounded up to the greater adjacent Quadruple value.
In cases when difference between the input value and the nearestQuadruplevalue is between(0.5 - 1e-17) * LSBand0.5 * LSB, the direction of the rounding is unpredictable.assignInfinity(boolean changeSign) Assigns the value of Infinity or -Infinity, depending on the sign of the previous value of the instance and thechangeSignparameter.Assigns the value ofQuadruple.MAX_VALUE(2^2147483647 * (2 - 2^-128)= 1.76161305168396335320749314979184028566452310e+646456993) to the instance.Assigns the value ofQuadruple.MIN_NORMAL(2^-2147483646 = 2.27064621040149253752656726517958758124747730e-646456993) to the instance.Assigns the value ofQuadruple.MIN_VALUE(2^-2147483774 = 6.67282948260747430814835377499134611597699952e-646457032) to the instance.Assigns the value of "Not a Number" (NaN) to this instance.Assigns the value of-Infinityto this instance.Assigns the value of+Infinityto this instance.assignWithUnbiasedExponent(boolean negative, int exponent, long mantHi, long mantLo) Builds a Quadruple value from the given low-level parts and assigns it to the instance.
Treats theexponentparameter as the unbiased exponent value, whose0value corresponds to theQuadruplevalue of 1.0.assignZero(boolean changeSign) Assigns the value of zero to this instance with or without inverting its sign.static intCompares the values of two instances.intcompareMagnitudeTo(Quadruple other) Compares the magnitude (absolute value) of this instance with the magnitude of the other instance.intcompareTo(double other) Compares the value of this instance with the specifieddoublevalue.intcompareTo(long other) Compares the value of this instance with the specifiedlongvalue.intCompares the value of this instance with the value of the specified instance.cpy()Returns a copy of this Quadruple.divide(double divisor) Divides the value of this Quadruple by the value of the givendoubledivisor.Divides the value of this Quadruple by the value of the givenQuadrupledivisor.doubleConverts the value of thisQuadrupleto adoublevalue in a way similar to standard narrowing conversions (e.g., fromdoubletofloat).booleanIndicates whether the otherQuadrupleis equal to this one.intexponent()Returns the raw (biased) value of the binary exponent of the value, i.e.floatConverts the value of thisQuadrupleto afloatvalue in a way similar to standard narrowing conversions (e.g., fromdoubletofloat).static Quadruplefrom(double dValue) Creates a newQuadrupleinstance with the givendoublevalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(double).static Quadruplefrom(long lValue) Creates a newQuadruplewith the givenlongvalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(long).static QuadrupleCreates a newQuadruplewith the value represented by the givenString.
First creates an empty (zero) instance, then assigns the given value to the new instance, converting the string to the corresponding floating-point value.inthashCode()Computes a hashcode for thisQuadruple, based on the values of its fields.intintValue()Converts the value of thisQuadrupleto anintvalue in a way similar to standard narrowing conversions (e.g., fromdoubletoint).booleanChecks if the value is infinite (i.e.booleanisNaN()Checks if the value is not a number (i.e.booleanChecks if the value is negative.booleanisZero()Checks if the value is zero, either positive or negative.longConverts the value of thisQuadrupleto alongvalue in a way similar to standard narrowing conversions (e.g., fromdoubletolong).longmakeSubnormal(long exp2) For a Quadruple with a normal mantissa (with implied unity) and non-positive biased exponent, converts it into the conventional subnormal form, with the exponent = 0 and the mantissa shifted rightwards with explicit 1 in the appropriate position.
Shifts mantissa rightwards by |exp2| + 1 bits, sets explicit 1, and rounds it up, taking into account the bits having been shifted-outlongmantHi()Returns the most significant 64 bits of the fractional part of the mantissa.longmantLo()Returns the least significant 64 bits of the fractional part of the mantissastatic QuadrupleReturns a new instance ofQuadruplewith the value of the maximum of the values of the operands.static QuadrupleReturns a new instance ofQuadruplewith the value of the minimum of the values of the operands.multiply(double factor) Multiplies the value of this Quadruple by the value of the givendoublefactor.multiply(long factor) Multiplies the value of this Quadruple by the value of the givenlongfactor.Multiplies the value of this Quadruple by the value of the givenQuadruplefactor.static Quadruplenan()Returns a newQuadrupleinstance with the value ofNaN.negate()Changes the sign of this Quadruple.static Quadrupleone()Returns a newQuadrupleinstance with the value of 1.0.static Quadruplepi()Returns a newQuadrupleinstance with the value of the numberπ(pi) (3.141592653589793238462643383279502884195)voidsetExponent(int exponent) voidsetMantHi(long mantHi) voidsetMantLo(long mantLo) setNegative(boolean value) Sets the negative flag.intsignum()Returns 1 for positive values, -1 for negative values (including -0), and 0 for the positive zero valuesqrt()Computes a square root of the value of thisQuadrupleand replaces the old value of this instance with the newly-computed value.static QuadrupleComputes a square root of the value of the givenQuadruple, creates and returns a new instance of Quadruple containing the value of the square root.subtract(double subtrahend) Subtracts the value of the givendoublesubtrahend from the value of this Quadruple.Subtracts the value of the givenQuadruplesubtrahend from the value of this Quadruple.toString()Returns a decimal string representation of the value of thisQuadruplein a scientific (exponential) notation, rounded to 43 digits after point.
For other String representations, seeformat(String)static Quadrupletwo()Returns a newQuadrupleinstance with the value of 2.0.static Quadruplezero()Returns a newQuadrupleinstance with the value of 0.0.Methods inherited from class Number
byteValue, shortValue
-
Field Details
-
EXPONENT_OF_ONE
public static final int EXPONENT_OF_ONEThe value of the exponent (biased) corresponding to1.0 == 2^0; equals to 2_147_483_647 (0x7FFF_FFFF). The same asEXPONENT_BIAS- See Also:
-
EXPONENT_BIAS
public static final int EXPONENT_BIASThe value of the exponent (biased) corresponding to1.0 == 2^0; equals to 2_147_483_647 (0x7FFF_FFFF) The same asEXPONENT_OF_ONE- See Also:
-
EXPONENT_OF_MAX_VALUE
public static final long EXPONENT_OF_MAX_VALUEThe value of the exponent (biased), corresponding toMAX_VALUE; equals to 4_294_967_294L (0xFFFF_FFFEL)- See Also:
-
EXPONENT_OF_INFINITY
public static final int EXPONENT_OF_INFINITYThe value of the exponent (biased), corresponding toInfinity,-Infinity, andNaN; equals to -1 (0xFFFF_FFFF)- See Also:
-
-
Constructor Details
-
Quadruple
public Quadruple()Creates a new instance ofQuadruplewith value 0.0 -
Quadruple
Creates a newQuadrupleinstance with the value of the givenQuadrupleinstance.
First creates an empty (zero) instance, then copies the fields of the parameter. to the fields of the new instance- Parameters:
qValue- theQuadruplevalue to be assigned to the new instance.
-
Quadruple
public Quadruple(double dValue) Creates a newQuadrupleinstance with the givendoublevalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(double).- Parameters:
dValue- thedoublevalue to be assigned
-
Quadruple
public Quadruple(long lValue) Creates a newQuadruplewith the givenlongvalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(long).- Parameters:
lValue- thelongvalue to be assigned
-
Quadruple
Creates a newQuadruplewith the value represented by the givenString.
First creates an empty (zero) instance, then assigns the given value to the new instance, converting the string to the corresponding floating-point value. Some non-standard string designations for special values are admissible, seeassign(String)- Parameters:
strValue- theStringvalue to be assigned- See Also:
-
Quadruple
public Quadruple(boolean negative, int exponent, long mantHi, long mantLo) Creates a newQuadruplebuilt from the given parts.- Parameters:
negative- the sign of the value (truesignifies negative values)exponent- the binary exponent (unbiased)mantHi- the most significant 64 bits of fractional part of the mantissamantLo- the least significant 64 bits of fractional part of the mantissa
-
Quadruple
public Quadruple(int exponent, long mantHi, long mantLo) Creates a newQuadruplewith a positive value built from the given parts.- Parameters:
exponent- the binary exponent (unbiased)mantHi- the most significant 64 bits of fractional part of the mantissamantLo- the least significant 64 bits of fractional part of the mantissa
-
-
Method Details
-
from
Creates a newQuadruplewith the value represented by the givenString.
First creates an empty (zero) instance, then assigns the given value to the new instance, converting the string to the corresponding floating-point value. Some non-standard string designations for special values are admissible, seeassign(String)- Parameters:
strValue- theStringvalue to be assigned- See Also:
-
from
Creates a newQuadruplewith the givenlongvalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(long).- Parameters:
lValue- thelongvalue to be assigned
-
from
Creates a newQuadrupleinstance with the givendoublevalue.
First creates an empty (zero) instance, then assigns the given value to the new instance, usingassign(double).- Parameters:
dValue- thedoublevalue to be assigned
-
nan
Returns a newQuadrupleinstance with the value ofNaN.- Returns:
- a new
Quadrupleinstance with the value of NAN
-
zero
Returns a newQuadrupleinstance with the value of 0.0.- Returns:
- a new
Quadrupleinstance with the value of 0.0
-
one
Returns a newQuadrupleinstance with the value of 1.0.- Returns:
- a new
Quadrupleinstance with the value of 1.0
-
two
Returns a newQuadrupleinstance with the value of 2.0.- Returns:
- a new
Quadrupleinstance with the value of 2.0
-
pi
Returns a newQuadrupleinstance with the value of the numberπ(pi) (3.141592653589793238462643383279502884195)- Returns:
- a new
Quadrupleinstance with the value of the numberπ(pi)
-
exponent
public int exponent()Returns the raw (biased) value of the binary exponent of the value, i.e. 0x7FFF_FFFF for values falling within the interval of[1.0 .. 2.0), 0x8000_0000 for[2.0 .. 4.0)etc.- Returns:
- the raw (biased) value of the binary exponent of the value
-
mantHi
public long mantHi()Returns the most significant 64 bits of the fractional part of the mantissa.- Returns:
- the most significant 64 bits of the fractional part of the mantissa
-
mantLo
public long mantLo()Returns the least significant 64 bits of the fractional part of the mantissa- Returns:
- the least significant 64 bits of the fractional part of the mantissa
-
isNegative
public boolean isNegative()Checks if the value is negative.- Returns:
true, if the value is negative,falseotherwise
-
isInfinite
public boolean isInfinite()Checks if the value is infinite (i.e.NEGATIVE_INFINITYorPOSITIVE_INFINITY).- Returns:
true, if the value is infinity (either positive or negative),falseotherwise
-
isNaN
public boolean isNaN()Checks if the value is not a number (i.e. has the value ofNaN).- Returns:
true, if the value is not a number (NaN),falseotherwise
-
isZero
public boolean isZero()Checks if the value is zero, either positive or negative.- Returns:
true, if the value is 0 or -0, otherwise returns
-
assign
Assigns the given value to the instance (copies the values of the private fields of the parameter to the respective fields of this instance).- Parameters:
qValue- aQuadrupleinstance whose value is to assign- Returns:
- this instance with the newly assigned value
-
assign
Converts the given value to quadruple and assigns it to the instance.
Expands exponent to 32 bits preserving its value, and expands mantissa to 128 bits, filling with zeroes the least significant 76 bits that absent in the double value. Subnormal double values(Double.MIN_NORMAL < v <= Double.MIN_VALUE)are converted to normal quadruple values, by shifting them leftwards and correcting the exponent accordingly.- Parameters:
value- thedoublevalue to be assigned.- Returns:
- this instance with the newly assigned value
-
assign
Converts the given value to quadruple and assigns it to the instance.
To find the mantissa, shifts the bits of the absolute value of the parameter left, so that its most significant non-zero bit (that stands for the 'implicit unity' of the floating point formats) gets shifted out, then corrects the exponent depending on the shift distance and sets the sign in accordance with the initial sign of the parameter.- Parameters:
value- thelongvalue to be assigned- Returns:
- this instance with the newly assigned value
-
assign
Parses the given String that is expected to contain floating-point value in any conventional string form or a string designation of one of special values, and assigns the corresponding value to the instance.
Parsing is case-insensitive.
The admittable string designations for special values are the following:- "Quadruple.MIN_VALUE",
- "MIN_VALUE",
- "Quadruple.MAX_VALUE",
- "MAX_VALUE",
- "Quadruple.MIN_NORMAL",
- "MIN_NORMAL",
- "Quadruple.NaN",
- "NaN",
- "Quadruple.NEGATIVE_INFINITY",
- "NEGATIVE_INFINITY",
- "-INFINITY",
- "Quadruple.POSITIVE_INFINITy",
- "POSITIVE_INFINITY",
- "INFINITY",
- "+INFINITY".
If the exact value of the number represented by the input string is greater than the nearest exactQuadruplevalue by less than0.5 - 1e-17of the least significant bit of the mantissa of the latter, it gets rounded down to the aforementionedQuadruplevalue.
If it is greater by 0.5 LSB or more, it gets rounded up to the greater adjacent Quadruple value.
In cases when difference between the input value and the nearestQuadruplevalue is between(0.5 - 1e-17) * LSBand0.5 * LSB, the direction of the rounding is unpredictable.Expressing it via formulas,
(1 + (n + d) * 2^-128) * 2^e ==> (1 + n * 2^-128) * 2^e, if d <= 0.5 - 1e-17; (1 + (n + d) * 2^-128) * 2^e ==> (1 + (n + 1) * 2^-128) * 2^e, if d => 0.5.
where n is an integer less than2^128, e is the exponent of theQuadruple.
For example,1.5 + 0.5 * 2^-128, that equals
1.500000000000000000000000000000000000001469367938527859384960921...
gets rounded up to
1.5000000000000000000000000000000000000029387, whose mantissa is0x8000_..._0001,
while1.5 + (0.5 - 1e-17) * 2^-128, that equals to
1.500000000000000000000000000000000000001469367938527859355573561...
gets rounded down to 1.5, whose mantissa is0x8000_..._0000.
The values between the two may get rounded either up or down.- Parameters:
source- the String to be parsed- Returns:
- this instance with the newly assigned value
- Throws:
NullPointerException- if the input string isnullNumberFormatException- if the input string does not contain valid value
-
assignWithUnbiasedExponent
public Quadruple assignWithUnbiasedExponent(boolean negative, int exponent, long mantHi, long mantLo) Builds a Quadruple value from the given low-level parts and assigns it to the instance.
Treats theexponentparameter as the unbiased exponent value, whose0value corresponds to theQuadruplevalue of 1.0.- Parameters:
negative- the sign of the value (truefor negative)exponent- Binary exponent (unbiased, 0 means 2^0)mantHi- The higher 64 bits of the fractional part of the mantissamantLo- The lower 64 bits of the fractional part of the mantissa- Returns:
- A Quadruple containing the value built of the given parts
-
assignPositiveInfinity
Assigns the value of+Infinityto this instance.- Returns:
- this instance with the value of
POSITIVE_INFINITY
-
assignNegativeInfinity
Assigns the value of-Infinityto this instance.- Returns:
- this instance with the value of
NEGATIVE_INFINITY
-
assignNaN
Assigns the value of "Not a Number" (NaN) to this instance.- Returns:
- this instance with the value of
NaN
-
intValue
-
longValue
-
floatValue
public float floatValue()Converts the value of thisQuadrupleto afloatvalue in a way similar to standard narrowing conversions (e.g., fromdoubletofloat).- Specified by:
floatValuein classNumber- Returns:
- the value of this
Quadrupleinstance converted to afloat.
-
doubleValue
public double doubleValue()Converts the value of thisQuadrupleto adoublevalue in a way similar to standard narrowing conversions (e.g., fromdoubletofloat). Uses 'half-even' approach to the rounding, likeBigDecimal.doubleValue()- Specified by:
doubleValuein classNumber- Returns:
- the value of this
Quadrupleinstance converted to adouble.
-
toString
-
compareTo
Compares the value of this instance with the value of the specified instance.- Specified by:
compareToin interfaceComparable<Quadruple>- Parameters:
other- theQuadrupleto compare with- Returns:
- a negative integer, zero, or a positive integer as the value of this instance is less than, equal to, or greater than the value of the specified instance.
-
compareTo
public int compareTo(long other) Compares the value of this instance with the specifiedlongvalue. The value of the argument is converted to Quadruple, and then two Quadruple values are compared bycompareTo(Quadruple)- Parameters:
other- thelongvalue to compare with- Returns:
- a negative integer, zero, or a positive integer as the value of this instance is less than,
equal to, or greater than the specified
longvalue.
-
compareTo
public int compareTo(double other) Compares the value of this instance with the specifieddoublevalue. The value of the argument is converted to Quadruple, and then two Quadruple values are compared bycompareTo(Quadruple)- Parameters:
other- thedoublevalue to compare with- Returns:
- a negative integer, zero, or a positive integer as the value of this instance is less than,
equal to, or greater than the specified
doublevalue.
-
equals
Indicates whether the otherQuadrupleis equal to this one. -
hashCode
-
compare
Compares the values of two instances.- Parameters:
q1- the instance to compare with the other oneq2- the instance to compare with- Returns:
- a negative integer, zero, or a positive integer as the value of the first instance is less than, equal to, or greater than the value of the second instance.
-
compareMagnitudeTo
Compares the magnitude (absolute value) of this instance with the magnitude of the other instance.- Parameters:
other- the Quadruple to compare with- Returns:
- 1 if this instance is greater in magnitude than the
otherinstance, 0 if the argument is equal in magnitude to this instance, -1 if this instance is less in magnitude, than the argument
-
max
Returns a new instance ofQuadruplewith the value of the maximum of the values of the operands.- Parameters:
q1- first operand to compareq2- first operand to compare- Returns:
- a new instance of
Quadruplewhose value is equal to the value of the greater of the operands.
-
min
Returns a new instance ofQuadruplewith the value of the minimum of the values of the operands.- Parameters:
q1- first operand to compareq2- first operand to compare- Returns:
- a new instance of
Quadruplewhose value is equal to the value of the lesser of the operands.
-
add
Adds the value of the givenQuadruplesummand to the value of this Quadruple. The instance acquires a new value that equals the sum of the previous value and the value of the summand.- Parameters:
summand- the value to add- Returns:
- the reference to this object, which holds a new value that equals the sum of its previous value and the value of the summand
-
add
Adds the value of the givenlongsummand to the value of this Quadruple. The value of thelongoperand is preliminarily converted to aQuadruplevalue. The instance acquires the new value that equals the sum of the previous value and the value of the summand.- Parameters:
summand- the value to add- Returns:
- the reference to this object, which holds a new value that equals the sum of its previous value and the value of the summand
-
add
Adds the value of the givendoublesummand to the value of this Quadruple. The value of thedoubleoperand is preliminarily converted to aQuadruplevalue. The instance acquires the new value that equals the sum of the previous value and the value of the summand.- Parameters:
summand- the value to add- Returns:
- the reference to this object, which holds a new value that equals the sum of its previous value and the value of the summand
-
add
Adds the value of the givenQuadruple op2to the value ofQuadruple op1and creates a new instance of Quadruple containing the sum. The operands remain unchanged.- Parameters:
op1- the first operand to addop2- the second operand to add- Returns:
- a new instance of Quadruple containing the sum of the operands
-
add
Adds the value of the givenlong op2to the value ofQuadruple op1and creates a new instance of Quadruple containing the sum. The value of thelongoperand is preliminarily converted to aQuadruplevalue. The Quadruple operand remains unchanged.- Parameters:
op1- the first operand to addop2- the second operand to add- Returns:
- a new instance of Quadruple containing the sum of the operands
-
add
Adds the value of the givendouble op2to the value ofQuadruple op1and creates a new instance of Quadruple containing the sum. The value of thedoubleoperand is preliminarily converted to aQuadruplevalue. The Quadruple operand remains unchanged.- Parameters:
op1- the first operand to addop2- the second operand to add- Returns:
- a new instance of Quadruple containing the sum of the operands
-
subtract
Subtracts the value of the givenQuadruplesubtrahend from the value of this Quadruple. The instance acquires a new value that equals the difference between the previous value and the value of the subtrahend.- Parameters:
subtrahend- the value to be subtracted from the current value of this Quadruple- Returns:
- the reference to this object, which holds a new value that equals the difference between its previous value and the value of the subtrahend
-
subtract
Subtracts the value of the givendoublesubtrahend from the value of this Quadruple. The value of thedoublesubtrahend is preliminarily converted to aQuadruplevalue. The instance acquires a new value that equals the difference between the previous value and the value of the subtrahend.- Parameters:
subtrahend- the value to be subtracted from the current value of this Quadruple- Returns:
- the reference to this object, which holds a new value that equals the difference between its previous value and the value of the subtrahend
-
multiply
Multiplies the value of this Quadruple by the value of the givenQuadruplefactor. The instance acquires a new value that equals the product of the previous value and the value of the factor.- Parameters:
factor- the value to multiply the current value of this Quadruple by.- Returns:
- the reference to this object, which holds a new value that equals the product of its previous value and the value of the factor
-
multiply
Multiplies the value of this Quadruple by the value of the givenlongfactor. The value of thelongfactor is preliminarily converted to aQuadruplevalue. The instance acquires a new value that equals the product of the previous value and the value of the factor.- Parameters:
factor- the value to multiply the current value of this Quadruple by.- Returns:
- the reference to this object, which holds a new value that equals the product of its previous value and the value of the factor
-
multiply
Multiplies the value of this Quadruple by the value of the givendoublefactor. The value of thedoublefactor is preliminarily converted to aQuadruplevalue. The instance acquires a new value that equals the product of the previous value and the value of the factor.- Parameters:
factor- the value to multiply the current value of this Quadruple by.- Returns:
- the reference to this object, which holds a new value that equals the product of its previous value and the value of the factor
-
divide
Divides the value of this Quadruple by the value of the givenQuadrupledivisor. The instance acquires a new value that equals the quotient.- Parameters:
divisor- the divisor to divide the current value of this Quadruple by- Returns:
- the reference to this object, which holds a new value that equals the quotient of the previous value of this Quadruple divided by the given divisor
-
divide
Divides the value of this Quadruple by the value of the givendoubledivisor. The instance acquires a new value that equals the quotient. The value of thedoubledivisor is preliminarily converted to aQuadruplevalue.- Parameters:
divisor- the divisor to divide the current value of this Quadruple by- Returns:
- the reference to this object, which holds a new value that equals the quotient of the previous value of this Quadruple divided by the given divisor
-
sqrt
Computes a square root of the value of thisQuadrupleand replaces the old value of this instance with the newly-computed value.- Returns:
- the reference to this instance, which holds a new value that equals to the square root of its previous value
-
sqrt
Computes a square root of the value of the givenQuadruple, creates and returns a new instance of Quadruple containing the value of the square root. The parameter remains unchanged.- Parameters:
square- the value to find the square root of- Returns:
- a new instance of Quadruple containing the value of the square root of the given argument
-
setNegative
Sets the negative flag. -
setExponent
public void setExponent(int exponent) -
setMantHi
public void setMantHi(long mantHi) -
setMantLo
public void setMantLo(long mantLo) -
negate
Changes the sign of this Quadruple.- Returns:
- the reference to this object, which holds a new value that equals the previous value in magnitude, but with opposite sign
-
cpy
Returns a copy of this Quadruple.- Returns:
- A new instance of Quadruple with the same value as this
-
abs
Returns a new instance ofQuadruplewith the value of the absolute value of this instance- Returns:
- a new instance of
Quadruplewith the value of the absolute value of this instance
-
signum
public int signum()Returns 1 for positive values, -1 for negative values (including -0), and 0 for the positive zero value- Returns:
- 1 for positive values, -1 for negative values (including -0), and 0 for the positive zero value
-
makeSubnormal
public long makeSubnormal(long exp2) For a Quadruple with a normal mantissa (with implied unity) and non-positive biased exponent, converts it into the conventional subnormal form, with the exponent = 0 and the mantissa shifted rightwards with explicit 1 in the appropriate position.
Shifts mantissa rightwards by |exp2| + 1 bits, sets explicit 1, and rounds it up, taking into account the bits having been shifted-out- Parameters:
exp2- the exponent of the newly-found subnormal value (always negative)- Returns:
- the exponent for the new value, 0 in an ordinary case, an 1 if the rounding has led to overflow of the mantissa
-
assignMinNormal
Assigns the value ofQuadruple.MIN_NORMAL(2^-2147483646 = 2.27064621040149253752656726517958758124747730e-646456993) to the instance.- Returns:
- this instance with the new value
-
assignMaxValue
Assigns the value ofQuadruple.MAX_VALUE(2^2147483647 * (2 - 2^-128)= 1.76161305168396335320749314979184028566452310e+646456993) to the instance.- Returns:
- this instance with the new value
-
assignMinValue
Assigns the value ofQuadruple.MIN_VALUE(2^-2147483774 = 6.67282948260747430814835377499134611597699952e-646457032) to the instance.- Returns:
- this instance with the new value.
-
assignZero
Assigns the value of zero to this instance with or without inverting its sign.- Parameters:
changeSign- iftrue, the instance will change its sign, iffalse, the sign is not changed.- Returns:
- this instance with the new value (+0 or -0)
-
assignInfinity
Assigns the value of Infinity or -Infinity, depending on the sign of the previous value of the instance and thechangeSignparameter.- Parameters:
changeSign- iftrue, the instance will change its sign, iffalse, the sign is not changed.- Returns:
- this instance with the new value (Infinity or -Infinity)
-