public static IntToken bitwidth(Term term, TermContext context) { if (term instanceof BitVector) { return IntToken.of(((BitVector) term).bitwidth()); } else { Integer bitwidth = BitVector.getBitwidth(term); if (bitwidth == null) { return null; } return IntToken.of(bitwidth); } }
public static IntToken uvalue(BitVector term, TermContext context) { return IntToken.of(term.unsignedValue()); }
public static IntToken exponentBits(FloatToken term, TermContext context) { return IntToken.of(term.exponent()); }
public static IntToken exponent(FloatToken term, TermContext context) { BinaryMathContext mc = getMathContext(term); return IntToken.of(term.bigFloatValue().exponent(mc.minExponent, mc.maxExponent)); }
public static IntToken precision(FloatToken term, TermContext context) { return IntToken.of(term.bigFloatValue().precision()); }
/** * Rounds {@code term} to an integer by truncating it. Function is only defined on ordinary * numbers (i.e. not NaN or infinity). */ public static IntToken float2int(FloatToken term, TermContext context) { return IntToken.of( term.bigFloatValue() .rint(getMathContext(term).withRoundingMode(RoundingMode.DOWN)) .toBigIntegerExact()); }