Package ghidra.pcode.floatformat
Class BigFloat
java.lang.Object
ghidra.pcode.floatformat.BigFloat
- All Implemented Interfaces:
Comparable<BigFloat>
An IEEE 754 floating point class.
Values represented:
- QUIET_NAN, SIGNALED_NAN
- -INF, +INF
- value = sign * unscaled * 2 ^ (scale-fracbits)
Operations compute exact result then round to nearest even.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final BigDecimalstatic final BigDecimalstatic final Stringstatic final Stringstatic final Stringstatic final String -
Method Summary
Modifier and TypeMethodDescriptionvoidabs()this=abs(this)static BigFloatvoidthis+=otherstatic BigFloatprotected voidvoidceil()this=ceil(this)static BigFloatintcopy()protected voidvoidthis/=otherstatic BigFloatbooleanvoidfloor()this=floor(this)static BigFloatprotected intinthashCode()static BigFloatinfinity(int fracbits, int expbits, int sign) protected voidinternalRound(boolean eps) This function is used internally to round after a computation.booleanDetermine if the state of this BigFloat reflects a subnormal/denormal value.booleanbooleanisNaN()booleanisNormal()Determine if the state of this BigFloat reflects a normalized value.booleanisZero()protected voidprotected voidprotected voidmakeZero()voidthis*=otherstatic BigFloatvoidnegate()this*=-1static BigFloatstatic BigFloatquietNaN(int fracbits, int expbits, int sign) Return the BigFloat with the given number of bits representing (quiet) NaN.voidround()Round this value to the nearest whole numberstatic BigFloatprotected voidscaleUpTo(int newLength) voidsqrt()this=sqrt(this)static BigFloatvoidthis-=otherstatic BigFloatprotected voidIf finite, the returned BigDecimal is exactly equal to this.toString()Perform rounding and conversion to BigDecimal prior to generating a formatted decimal string of the specified BigFloat value.toString(FloatFormat ff, boolean compact) Perform appropriate rounding and conversion to BigDecimal prior to generating a formatted decimal string of the specified BigFloat value.toString(MathContext displayContext) Perform rounding and conversion to BigDecimal prior to generating a formatted decimal string of the specified BigFloat value.voidtrunc()this=trunc(this)(round toward zero)static BigFloatstatic BigFloatzero(int fracbits, int expbits) Return the BigFloat with the given number of bits representing (positive) zero.static BigFloatzero(int fracbits, int expbits, int sign) Return the BigFloat with the given number of bits representing zero.
-
Field Details
-
INFINITY
- See Also:
-
POSITIVE_INFINITY
- See Also:
-
NEGATIVE_INFINITY
- See Also:
-
NAN
- See Also:
-
BIG_POSITIVE_INFINITY
-
BIG_NEGATIVE_INFINITY
-
-
Method Details
-
hashCode
public int hashCode() -
equals
-
zero
Return the BigFloat with the given number of bits representing zero.- Parameters:
fracbits- number of fractional bitsexpbits- number of bits in the exponentsign- +1 or -1- Returns:
- a BigFloat representing +zero or -zero
-
zero
Return the BigFloat with the given number of bits representing (positive) zero.- Parameters:
fracbits- number of fractional bitsexpbits- number of bits in the exponent- Returns:
- a BigFloat representing +zero
-
infinity
- Parameters:
fracbits- number of fractional bitsexpbits- number of bits in the exponentsign- +1 or -1- Returns:
- +inf or -inf
-
quietNaN
Return the BigFloat with the given number of bits representing (quiet) NaN.- Parameters:
fracbits- number of fractional bitsexpbits- number of bits in the exponentsign- +1 or -1- Returns:
- a BigFloat representing (quiet) NaN
-
scaleUpTo
protected void scaleUpTo(int newLength) -
isNormal
public boolean isNormal()Determine if the state of this BigFloat reflects a normalized value.NOTE: This method relies on the manner of construction and only checks for
FloatKind.FINITEand that full size of the fractional bits is used for the unscaled value.- Returns:
trueif this BigFloat is FINITE and normal.
-
isDenormal
public boolean isDenormal()Determine if the state of this BigFloat reflects a subnormal/denormal value.NOTE: This method relies on the manner of construction and only checks for
FloatKind.FINITEand that the non-zero unscaled valued does not use all fractional bits.- Returns:
trueif this BigFloat is FINITE and denormal
-
internalRound
protected void internalRound(boolean eps) This function is used internally to round after a computation.Assume that the true value is
sign * (unscaled + eps) * 2 ^ (scale-fracbits) and unscaled.bitLength() > fracbits+1 (or the value is subnormal with at least 1 bit of extra precision)
- Parameters:
eps- < 1
-
getLeadBitPos
protected int getLeadBitPos() -
toBigDecimal
If finite, the returned BigDecimal is exactly equal to this. If not finite, one of the FloatFormat.BIG_* constants is returned.- Returns:
- a BigDecimal or null if value is NaN (i.e.,
FloatKind.QUIET_NANorFloatKind.SIGNALING_NAN).
-
toBinaryString
-
makeSignalingNaN
protected void makeSignalingNaN() -
makeQuietNaN
protected void makeQuietNaN() -
isNaN
public boolean isNaN()- Returns:
trueif this BigFloat is NaN
-
makeZero
protected void makeZero() -
isInfinite
public boolean isInfinite()- Returns:
trueif this BigFloat is infinite
-
isZero
public boolean isZero()- Returns:
trueif this BigFloat is zero
-
copy
- Returns:
- a copy of this BigFloat
-
copyFrom
-
div
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a/b
-
div
this/=other- Parameters:
other- a BigFloat
-
mul
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a*b
-
mul
this*=other- Parameters:
other- a BigFloat
-
add
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a+b
-
add
this+=other- Parameters:
other- a BigFloat
-
sub
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a-b
-
sub
this-=other- Parameters:
other- a BigFloat
-
add0
-
sub0
-
sqrt
- Parameters:
a- a BigFloat- Returns:
- the square root of
a
-
sqrt
public void sqrt()this=sqrt(this)Square root by abacus algorithm, Martin Guy @ UKC, June 1985. From a book on programming abaci by Mr C. Woo. Argument is a positive integer, as is result.
adapted from http://medialab.freaknet.org/martin/src/sqrt/sqrt.c
-
floor
- Parameters:
a- a BigFloat- Returns:
floor(a)
-
floor
public void floor()this=floor(this) -
ceil
- Parameters:
a- a BigFloat- Returns:
ceil(a)
-
ceil
public void ceil()this=ceil(this) -
trunc
- Parameters:
a- a BigFloat- Returns:
trunc(a)(round toward zero)
-
trunc
public void trunc()this=trunc(this)(round toward zero) -
negate
public void negate()this*=-1 -
negate
- Parameters:
a- a BigFloat- Returns:
-a
-
abs
- Parameters:
a- a BigFloat- Returns:
abs(a)
-
abs
public void abs()this=abs(this) -
toBigInteger
- Returns:
- the truncated integer form of this BigFloat
-
round
- Parameters:
a- a BigFloat- Returns:
round(a)
-
round
public void round()Round this value to the nearest whole number -
compareTo
- Specified by:
compareToin interfaceComparable<BigFloat>
-
toString
Perform rounding and conversion to BigDecimal prior to generating a formatted decimal string of the specified BigFloat value. A default generatedMathContextis used. -
toString
Perform rounding and conversion to BigDecimal prior to generating a formatted decimal string of the specified BigFloat value.- Parameters:
displayContext- display context used for rounding and precision.- Returns:
- decimal string representation
-
toString
Perform appropriate rounding and conversion to BigDecimal prior to generating a formatted decimal string of the specified BigFloat value. SeetoString(FloatFormat, boolean),FloatFormat.toDecimalString(BigFloat)andFloatFormat.toDecimalString(BigFloat, boolean).- Parameters:
ff- float formatcompact- if true the precision will be reduced to a form which is still equivalent at the binary encoding level for the specified FloatFormat.- Returns:
- decimal string representation
-