Package ghidra.pcode.floatformat
Class BigFloat
- java.lang.Object
-
- ghidra.pcode.floatformat.BigFloat
-
- All Implemented Interfaces:
java.lang.Comparable<BigFloat>
public class BigFloat extends java.lang.Object implements java.lang.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.
-
-
Constructor Summary
Constructors Constructor Description BigFloat(int fracbits, int expbits, ghidra.pcode.floatformat.FloatKind kind, int sign, java.math.BigInteger unscaled, int scale)Construct a BigFloat.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidabs()this=abs(this)static BigFloatabs(BigFloat a)voidadd(BigFloat other)this+=otherstatic BigFloatadd(BigFloat a, BigFloat b)protected voidadd0(BigFloat other)voidceil()this=ceil(this)static BigFloatceil(BigFloat a)intcompareTo(BigFloat other)BigFloatcopy()protected voidcopyFrom(BigFloat other)voiddiv(BigFloat other)this/=otherstatic BigFloatdiv(BigFloat a, BigFloat b)booleanequals(java.lang.Object obj)voidfloor()this=floor(this)static BigFloatfloor(BigFloat a)protected intgetLeadBitPos()inthashCode()static BigFloatinfinity(int fracbits, int expbits, int sign)protected voidinternalRound(boolean eps)This function is used internally to round after a computation.booleanisInfinite()booleanisNaN()booleanisNormal()booleanisZero()protected voidmakeQuietNaN()protected voidmakeSignalingNaN()protected voidmakeZero()voidmul(BigFloat other)this*=otherstatic BigFloatmul(BigFloat a, BigFloat b)voidnegate()this*=-1static BigFloatnegate(BigFloat a)static BigFloatquietNaN(int fracbits, int expbits, int sign)Return the BigFloat with the given number of bits representing (quiet) NaN.voidround()this=round(this)static BigFloatround(BigFloat a)protected voidscaleUpTo(int newLength)voidsqrt()this=sqrt(this)static BigFloatsqrt(BigFloat a)voidsub(BigFloat other)this-=otherstatic BigFloatsub(BigFloat a, BigFloat b)protected voidsub0(BigFloat other)java.math.BigDecimaltoBigDecimal()If finite, the returned BigDecimal is exactly equal to this.java.math.BigIntegertoBigInteger()java.lang.StringtoBinaryString()voidtrunc()this=trunc(this)(round toward zero)static BigFloattrunc(BigFloat a)static BigFloatvalueOf(int fracbits, int expbits, java.math.BigInteger i)Return the BigFloat with the given number of bits representing the given BigInteger.static 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.
-
-
-
Constructor Detail
-
BigFloat
public BigFloat(int fracbits, int expbits, ghidra.pcode.floatformat.FloatKind kind, int sign, java.math.BigInteger unscaled, int scale)Construct a BigFloat. If kind is FINITE, the value issign*unscaled*2^(scale-fracbits)- Parameters:
fracbits- number of fractional bitsexpbits- maximum number of bits in exponentkind- the Kind, FINITE, INFINITE, ...sign- +1 or -1unscaled- the value's mantissascale- value's scale
-
-
Method Detail
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equalsin classjava.lang.Object
-
valueOf
public static BigFloat valueOf(int fracbits, int expbits, java.math.BigInteger i)
Return the BigFloat with the given number of bits representing the given BigInteger.- Parameters:
fracbits- number of fractional bitsexpbits- number of bits in the exponenti- an integer- Returns:
- a BigFloat representing i
-
zero
public static BigFloat zero(int fracbits, int expbits, int sign)
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
public static BigFloat zero(int fracbits, int expbits)
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
public static BigFloat infinity(int fracbits, int expbits, int sign)
- Parameters:
fracbits- number of fractional bitsexpbits- number of bits in the exponentsign- +1 or -1- Returns:
- +inf or -inf
-
quietNaN
public static BigFloat quietNaN(int fracbits, int expbits, int sign)
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()
- Returns:
trueif this BigFloat is FINITE and normal
-
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
public java.math.BigDecimal 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
-
toBinaryString
public java.lang.String 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
public BigFloat copy()
- Returns:
- a copy of this BigFloat
-
copyFrom
protected void copyFrom(BigFloat other)
-
div
public static BigFloat div(BigFloat a, BigFloat b)
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a/b
-
div
public void div(BigFloat other)
this/=other- Parameters:
other- a BigFloat
-
mul
public static BigFloat mul(BigFloat a, BigFloat b)
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a*b
-
mul
public void mul(BigFloat other)
this*=other- Parameters:
other- a BigFloat
-
add
public static BigFloat add(BigFloat a, BigFloat b)
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a+b
-
add
public void add(BigFloat other)
this+=other- Parameters:
other- a BigFloat
-
sub
public static BigFloat sub(BigFloat a, BigFloat b)
- Parameters:
a- a BigFloatb- a BigFloat- Returns:
a-b
-
sub
public void sub(BigFloat other)
this-=other- Parameters:
other- a BigFloat
-
add0
protected void add0(BigFloat other)
-
sub0
protected void sub0(BigFloat other)
-
sqrt
public static BigFloat sqrt(BigFloat a)
- 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
public void floor()
this=floor(this)
-
ceil
public void ceil()
this=ceil(this)
-
trunc
public static BigFloat trunc(BigFloat a)
- 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
-
abs
public void abs()
this=abs(this)
-
toBigInteger
public java.math.BigInteger toBigInteger()
- Returns:
- the truncated integer form of this BigFloat
-
round
public void round()
this=round(this)
-
-