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
Modifier and TypeFieldDescriptionstatic final BigDecimal
static final BigDecimal
static final String
static final String
static final String
static final String
-
Method Summary
Modifier and TypeMethodDescriptionvoid
abs()
this=abs(this)
static BigFloat
void
this+=other
static BigFloat
protected void
void
ceil()
this=ceil(this)
static BigFloat
int
copy()
protected void
void
this/=other
static BigFloat
boolean
void
floor()
this=floor(this)
static BigFloat
protected int
int
hashCode()
static BigFloat
infinity
(int fracbits, int expbits, int sign) protected void
internalRound
(boolean eps) This function is used internally to round after a computation.boolean
Determine if the state of this BigFloat reflects a subnormal/denormal value.boolean
boolean
isNaN()
boolean
isNormal()
Determine if the state of this BigFloat reflects a normalized value.boolean
isZero()
protected void
protected void
protected void
makeZero()
void
this*=other
static BigFloat
void
negate()
this*=-1
static BigFloat
static BigFloat
quietNaN
(int fracbits, int expbits, int sign) Return the BigFloat with the given number of bits representing (quiet) NaN.void
round()
Round this value to the nearest whole numberstatic BigFloat
protected void
scaleUpTo
(int newLength) void
sqrt()
this=sqrt(this)
static BigFloat
void
this-=other
static BigFloat
protected void
If 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.void
trunc()
this=trunc(this)
(round toward zero)static BigFloat
static BigFloat
zero
(int fracbits, int expbits) Return the BigFloat with the given number of bits representing (positive) zero.static BigFloat
zero
(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.FINITE
and that full size of the fractional bits is used for the unscaled value.- Returns:
true
if 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.FINITE
and that the non-zero unscaled valued does not use all fractional bits.- Returns:
true
if 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_NAN
orFloatKind.SIGNALING_NAN
).
-
toBinaryString
-
makeSignalingNaN
protected void makeSignalingNaN() -
makeQuietNaN
protected void makeQuietNaN() -
isNaN
public boolean isNaN()- Returns:
true
if this BigFloat is NaN
-
makeZero
protected void makeZero() -
isInfinite
public boolean isInfinite()- Returns:
true
if this BigFloat is infinite
-
isZero
public boolean isZero()- Returns:
true
if 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:
compareTo
in interfaceComparable<BigFloat>
-
toString
Perform rounding and conversion to BigDecimal prior to generating a formatted decimal string of the specified BigFloat value. A default generatedMathContext
is 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
-