Floating Point ¶
Basic FP Term Builders ¶
- cvc5.pythonic. FP ( name , fpsort , ctx = None ) ¶
-
Return a floating-point constant named name . fpsort is the floating-point sort. If ctx=None , then the global context is used.
>>> x = FP('x', FPSort(8, 24)) >>> is_fp(x) True >>> x.ebits() 8 >>> x.sort() FPSort(8, 24) >>> word = FPSort(8, 24) >>> x2 = FP('x', word) >>> eq(x, x2) True
- cvc5.pythonic. FPs ( names , fpsort , ctx = None ) ¶
-
Return an array of floating-point constants.
>>> x, y, z = FPs('x y z', FPSort(8, 24)) >>> x.sort() FPSort(8, 24) >>> x.sbits() 24 >>> x.ebits() 8 >>> fpMul(RNE(), fpAdd(RNE(), x, y), z) fpMul(RNE(), fpAdd(RNE(), x, y), z)
- cvc5.pythonic. FPVal ( val , exp = None , fps = None , ctx = None ) ¶
-
Return a floating-point value of value val and sort fps . If ctx=None , then the global context is used.
>>> v = FPVal(20.0, FPSort(8, 24)) >>> v 1.25*(2**4) >>> print("0x%.8x" % v.exponent_as_long()) 0x00000004 >>> v = FPVal(2.25, FPSort(8, 24)) >>> v 1.125*(2**1) >>> v = FPVal(-2.25, FPSort(8, 24)) >>> v -1.125*(2**1) >>> FPVal(-0.0, FPSort(8, 24)) -0.0 >>> FPVal(0.0, FPSort(8, 24)) +0.0 >>> FPVal(+0.0, FPSort(8, 24)) +0.0
- cvc5.pythonic. fpNaN ( s ) ¶
-
Create a SMT floating-point NaN term.
>>> s = FPSort(8, 24) >>> set_fpa_pretty(True) >>> fpNaN(s) NaN >>> pb = get_fpa_pretty() >>> set_fpa_pretty(False) >>> fpNaN(s) fpNaN(FPSort(8, 24)) >>> set_fpa_pretty(pb)
- cvc5.pythonic. fpPlusInfinity ( s ) ¶
-
Create a SMT floating-point +oo term.
>>> s = FPSort(8, 24) >>> pb = get_fpa_pretty() >>> set_fpa_pretty(True) >>> fpPlusInfinity(s) +oo >>> set_fpa_pretty(False) >>> fpPlusInfinity(s) fpPlusInfinity(FPSort(8, 24)) >>> set_fpa_pretty(pb)
- cvc5.pythonic. fpMinusInfinity ( s ) ¶
-
Create a SMT floating-point -oo term.
- cvc5.pythonic. fpInfinity ( s , negative ) ¶
-
Create a SMT floating-point +oo or -oo term.
- cvc5.pythonic. fpPlusZero ( s ) ¶
-
Create a SMT floating-point +0.0 term.
- cvc5.pythonic. fpMinusZero ( s ) ¶
-
Create a SMT floating-point -0.0 term.
- cvc5.pythonic. fpZero ( s , negative ) ¶
-
Create a SMT floating-point +0.0 or -0.0 term.
- cvc5.pythonic. FPSort ( ebits , sbits , ctx = None ) ¶
-
Return a SMT floating-point sort of the given sizes. If ctx=None , then the global context is used.
>>> Single = FPSort(8, 24) >>> Double = FPSort(11, 53) >>> Single FPSort(8, 24) >>> x = Const('x', Single) >>> eq(x, FP('x', FPSort(8, 24))) True
- cvc5.pythonic. Float16 ( ctx = None ) ¶
-
Floating-point 16-bit (half) sort.
- cvc5.pythonic. FloatHalf ( ctx = None ) ¶
-
Floating-point 16-bit (half) sort.
- cvc5.pythonic. Float32 ( ctx = None ) ¶
-
Floating-point 32-bit (single) sort.
- cvc5.pythonic. FloatSingle ( ctx = None ) ¶
-
Floating-point 32-bit (single) sort.
- cvc5.pythonic. Float64 ( ctx = None ) ¶
-
Floating-point 64-bit (double) sort.
- cvc5.pythonic. FloatDouble ( ctx = None ) ¶
-
Floating-point 64-bit (double) sort.
- cvc5.pythonic. Float128 ( ctx = None ) ¶
-
Floating-point 128-bit (quadruple) sort.
- cvc5.pythonic. FloatQuadruple ( ctx = None ) ¶
-
Floating-point 128-bit (quadruple) sort.
FP Operators ¶
See the following operator overloads for building basic floating-point terms:
-
unary
-
:cvc5.pythonic.FPRef.__neg__()
- cvc5.pythonic. fpAbs ( a , ctx = None ) ¶
-
Create a SMT floating-point absolute value expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FPVal(1.0, s) >>> fpAbs(x) fpAbs(1) >>> y = FPVal(-20.0, s) >>> y -1.25*(2**4) >>> fpAbs(y) fpAbs(-1.25*(2**4)) >>> fpAbs(-1.25*(2**4)) fpAbs(-1.25*(2**4)) >>> fpAbs(x).sort() FPSort(8, 24)
- cvc5.pythonic. fpNeg ( a , ctx = None ) ¶
-
Create a SMT floating-point addition expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FP('x', s) >>> fpNeg(x) -x >>> fpNeg(x).sort() FPSort(8, 24)
- cvc5.pythonic. fpAdd ( rm , a , b , ctx = None ) ¶
-
Create a SMT floating-point addition expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FP('x', s) >>> y = FP('y', s) >>> fpAdd(rm, x, y) fpAdd(RNE(), x, y) >>> fpAdd(RTZ(), x, y) # default rounding mode is RTZ x + y >>> fpAdd(rm, x, y).sort() FPSort(8, 24)
- cvc5.pythonic. fpSub ( rm , a , b , ctx = None ) ¶
-
Create a SMT floating-point subtraction expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FP('x', s) >>> y = FP('y', s) >>> fpSub(rm, x, y) fpSub(RNE(), x, y) >>> fpSub(rm, x, y).sort() FPSort(8, 24)
- cvc5.pythonic. fpMul ( rm , a , b , ctx = None ) ¶
-
Create a SMT floating-point multiplication expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FP('x', s) >>> y = FP('y', s) >>> fpMul(rm, x, y) fpMul(RNE(), x, y) >>> fpMul(rm, x, y).sort() FPSort(8, 24)
- cvc5.pythonic. fpDiv ( rm , a , b , ctx = None ) ¶
-
Create a SMT floating-point division expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FP('x', s) >>> y = FP('y', s) >>> fpDiv(rm, x, y) fpDiv(RNE(), x, y) >>> fpDiv(rm, x, y).sort() FPSort(8, 24)
- cvc5.pythonic. fpRem ( a , b , ctx = None ) ¶
-
Create a SMT floating-point remainder expression.
>>> s = FPSort(8, 24) >>> x = FP('x', s) >>> y = FP('y', s) >>> fpRem(x, y) fpRem(x, y) >>> fpRem(x, y).sort() FPSort(8, 24)
- cvc5.pythonic. fpMin ( a , b , ctx = None ) ¶
-
Create a SMT floating-point minimum expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FP('x', s) >>> y = FP('y', s) >>> fpMin(x, y) fpMin(x, y) >>> fpMin(x, y).sort() FPSort(8, 24)
- cvc5.pythonic. fpMax ( a , b , ctx = None ) ¶
-
Create a SMT floating-point maximum expression.
>>> s = FPSort(8, 24) >>> rm = RNE() >>> x = FP('x', s) >>> y = FP('y', s) >>> fpMax(x, y) fpMax(x, y) >>> fpMax(x, y).sort() FPSort(8, 24)
- cvc5.pythonic. fpFMA ( rm , a , b , c , ctx = None ) ¶
-
Create a SMT floating-point fused multiply-add expression.
- cvc5.pythonic. fpSqrt ( rm , a , ctx = None ) ¶
-
Create a SMT floating-point square root expression.
- cvc5.pythonic. fpRoundToIntegral ( rm , a , ctx = None ) ¶
-
Create a SMT floating-point roundToIntegral expression.
- cvc5.pythonic. fpIsNaN ( a , ctx = None ) ¶
-
Create a SMT floating-point isNaN expression.
>>> s = FPSort(8, 24) >>> x = FP('x', s) >>> y = FP('y', s) >>> fpIsNaN(x) fpIsNaN(x)
- cvc5.pythonic. fpIsInf ( a , ctx = None ) ¶
-
Create a SMT floating-point isInfinite expression.
>>> s = FPSort(8, 24) >>> x = FP('x', s) >>> fpIsInf(x) fpIsInf(x)
- cvc5.pythonic. fpIsZero ( a , ctx = None ) ¶
-
Create a SMT floating-point isZero expression.
- cvc5.pythonic. fpIsNormal ( a , ctx = None ) ¶
-
Create a SMT floating-point isNormal expression.
- cvc5.pythonic. fpIsSubnormal ( a , ctx = None ) ¶
-
Create a SMT floating-point isSubnormal expression.
- cvc5.pythonic. fpIsNegative ( a , ctx = None ) ¶
-
Create a SMT floating-point isNegative expression.
- cvc5.pythonic. fpIsPositive ( a , ctx = None ) ¶
-
Create a SMT floating-point isPositive expression.
- cvc5.pythonic. fpLT ( a , b , ctx = None ) ¶
-
Create the SMT floating-point expression other < self .
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpLT(x, y) x < y >>> (x < y).sexpr() '(fp.lt x y)'
- cvc5.pythonic. fpLEQ ( a , b , ctx = None ) ¶
-
Create the SMT floating-point expression other <= self .
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpLEQ(x, y) x <= y >>> (x <= y).sexpr() '(fp.leq x y)'
- cvc5.pythonic. fpGT ( a , b , ctx = None ) ¶
-
Create the SMT floating-point expression other > self .
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpGT(x, y) x > y >>> (x > y).sexpr() '(fp.gt x y)'
- cvc5.pythonic. fpGEQ ( a , b , ctx = None ) ¶
-
Create the SMT floating-point expression other >= self .
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpGEQ(x, y) x >= y >>> (x >= y).sexpr() '(fp.geq x y)'
- cvc5.pythonic. fpEQ ( a , b , ctx = None ) ¶
-
Create the SMT floating-point expression fpEQ(other, self) .
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpEQ(x, y) fpEQ(x, y) >>> fpEQ(x, y).sexpr() '(fp.eq x y)'
- cvc5.pythonic. fpNEQ ( a , b , ctx = None ) ¶
-
Create the SMT floating-point expression Not(fpEQ(other, self)) .
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpNEQ(x, y) Not(fpEQ(x, y)) >>> (x != y).sexpr() '(distinct x y)'
- cvc5.pythonic. fpFP ( sgn , exp , sig , ctx = None ) ¶
-
Create the SMT floating-point value fpFP(sgn, sig, exp) from the three bit-vectors sgn, sig, and exp.
>>> s = FPSort(8, 24) >>> x = fpFP(BitVecVal(1, 1), BitVecVal(2**7-1, 8), BitVecVal(2**22, 23)) >>> print(x) fpToFP(Concat(1, 127, 4194304)) >>> xv = FPVal(-1.5, s) >>> print(xv) -1.5 >>> slvr = Solver() >>> slvr.add(fpEQ(x, xv)) >>> slvr.check() sat >>> xv = FPVal(+1.5, s) >>> print(xv) 1.5 >>> slvr = Solver() >>> slvr.add(fpEQ(x, xv)) >>> slvr.check() unsat
- cvc5.pythonic. fpToFP ( a1 , a2 = None , a3 = None , ctx = None ) ¶
-
Create a SMT floating-point conversion expression from other term sorts to floating-point.
From a floating-point term with different precision:
>>> x = FPVal(1.0, Float32()) >>> x_db = fpToFP(RNE(), x, Float64()) >>> x_db.sort() FPSort(11, 53)
From a real term:
>>> x_r = RealVal(1.5) >>> simplify(fpToFP(RNE(), x_r, Float32())) 1.5
From a signed bit-vector term:
>>> x_signed = BitVecVal(-5, BitVecSort(32)) >>> simplify(fpToFP(RNE(), x_signed, Float32())) -1.25*(2**2)
- cvc5.pythonic. fpBVToFP ( v , sort , ctx = None ) ¶
-
Create a SMT floating-point conversion expression that represents the conversion from a bit-vector term to a floating-point term.
>>> x_bv = BitVecVal(0x3F800000, 32) >>> x_fp = fpBVToFP(x_bv, Float32()) >>> x_fp fpToFP(1065353216) >>> simplify(x_fp) 1
- cvc5.pythonic. fpFPToFP ( rm , v , sort , ctx = None ) ¶
-
Create a SMT floating-point conversion expression that represents the conversion from a floating-point term to a floating-point term of different precision.
>>> x_sgl = FPVal(1.0, Float32()) >>> x_dbl = fpFPToFP(RNE(), x_sgl, Float64()) >>> x_dbl fpToFP(RNE(), 1) >>> simplify(x_dbl) 1 >>> x_dbl.sort() FPSort(11, 53)
- cvc5.pythonic. fpRealToFP ( rm , v , sort , ctx = None ) ¶
-
Create a SMT floating-point conversion expression that represents the conversion from a real term to a floating-point term.
>>> x_r = RealVal(1.5) >>> x_fp = fpRealToFP(RNE(), x_r, Float32()) >>> x_fp fpToFP(RNE(), 3/2) >>> simplify(x_fp) 1.5
- cvc5.pythonic. fpSignedToFP ( rm , v , sort , ctx = None ) ¶
-
Create a SMT floating-point conversion expression that represents the conversion from a signed bit-vector term (encoding an integer) to a floating-point term.
>>> x_signed = BitVecVal(-5, BitVecSort(32)) >>> x_fp = fpSignedToFP(RNE(), x_signed, Float32()) >>> x_fp fpToFP(RNE(), 4294967291) >>> simplify(x_fp) -1.25*(2**2)
- cvc5.pythonic. fpUnsignedToFP ( rm , v , sort , ctx = None ) ¶
-
Create a SMT floating-point conversion expression that represents the conversion from an unsigned bit-vector term (encoding an integer) to a floating-point term.
>>> x_signed = BitVecVal(-5, BitVecSort(32)) >>> x_fp = fpUnsignedToFP(RNE(), x_signed, Float32()) >>> x_fp fpToFP(RNE(), 4294967291) >>> simplify(x_fp) 1*(2**32)
- cvc5.pythonic. fpToFPUnsigned ( rm , x , s , ctx = None ) ¶
-
Create a SMT floating-point conversion expression, from unsigned bit-vector to floating-point expression.
- cvc5.pythonic. fpToSBV ( rm , x , s , ctx = None ) ¶
-
Create a SMT floating-point conversion expression, from floating-point expression to signed bit-vector.
>>> x = FP('x', FPSort(8, 24)) >>> y = fpToSBV(RTZ(), x, BitVecSort(32)) >>> print(is_fp(x)) True >>> print(is_bv(y)) True >>> print(is_fp(y)) False >>> print(is_bv(x)) False
- cvc5.pythonic. fpToUBV ( rm , x , s , ctx = None ) ¶
-
Create a SMT floating-point conversion expression, from floating-point expression to unsigned bit-vector.
>>> x = FP('x', FPSort(8, 24)) >>> y = fpToUBV(RTZ(), x, BitVecSort(32)) >>> print(is_fp(x)) True >>> print(is_bv(y)) True >>> print(is_fp(y)) False >>> print(is_bv(x)) False
- cvc5.pythonic. fpToReal ( x , ctx = None ) ¶
-
Create a SMT floating-point conversion expression, from floating-point expression to real.
>>> x = FP('x', FPSort(8, 24)) >>> y = fpToReal(x) >>> print(is_fp(x)) True >>> print(is_real(y)) True >>> print(is_fp(y)) False >>> print(is_real(x)) False
Testers ¶
- cvc5.pythonic. is_fp_sort ( s ) ¶
-
Return True if s is a SMT floating-point sort.
>>> is_fp_sort(FPSort(8, 24)) True >>> is_fp_sort(IntSort()) False
- cvc5.pythonic. is_fp ( a ) ¶
-
Return True if a is a SMT floating-point expression.
>>> b = FP('b', FPSort(8, 24)) >>> is_fp(b) True >>> is_fp(b + 1.0) True >>> is_fp(Int('x')) False
- cvc5.pythonic. is_fp_value ( a ) ¶
-
Return True if a is a SMT floating-point numeral value.
>>> b = FP('b', FPSort(8, 24)) >>> is_fp_value(b) False >>> b = FPVal(1.0, FPSort(8, 24)) >>> b 1 >>> is_fp_value(b) True
- cvc5.pythonic. is_fprm_sort ( s ) ¶
-
Return True if s is a SMT floating-point rounding mode sort.
>>> is_fprm_sort(FPSort(8, 24)) False >>> is_fprm_sort(RNE().sort()) True
- cvc5.pythonic. is_fprm ( a ) ¶
-
Return True if a is a SMT floating-point rounding mode expression.
>>> rm = RNE() >>> is_fprm(rm) True >>> rm = 1.0 >>> is_fprm(rm) False
- cvc5.pythonic. is_fprm_value ( a ) ¶
-
Return True if a is a SMT floating-point rounding mode numeral value.
FP Rounding Modes ¶
- cvc5.pythonic. RoundNearestTiesToEven ( ctx = None ) ¶
-
Round to nearest, with ties broken towards even.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RoundNearestTiesToEven(), x, y) fpMul(RNE(), x, y)
- cvc5.pythonic. RNE ( ctx = None ) ¶
-
Round to nearest, with ties broken towards even.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RNE(), x, y) fpMul(RNE(), x, y)
- cvc5.pythonic. RoundNearestTiesToAway ( ctx = None ) ¶
-
Round to nearest, with ties broken away from zero.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RoundNearestTiesToAway(), x, y) fpMul(RNA(), x, y)
- cvc5.pythonic. RNA ( ctx = None ) ¶
-
Round to nearest, with ties broken away from zero.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RNA(), x, y) fpMul(RNA(), x, y)
- cvc5.pythonic. RoundTowardPositive ( ctx = None ) ¶
-
Round towards more positive values.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RoundTowardPositive(), x, y) fpMul(RTP(), x, y)
- cvc5.pythonic. RTP ( ctx = None ) ¶
-
Round towards more positive values.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RTP(), x, y) fpMul(RTP(), x, y)
- cvc5.pythonic. RoundTowardNegative ( ctx = None ) ¶
-
Round towards more negative values.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RoundTowardNegative(), x, y) fpMul(RTN(), x, y)
- cvc5.pythonic. RTN ( ctx = None ) ¶
-
Round towards more negative values.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RTN(), x, y) fpMul(RTN(), x, y)
- cvc5.pythonic. RoundTowardZero ( ctx = None ) ¶
-
Round towards zero.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RoundTowardZero(), x, y) x * y
- cvc5.pythonic. RTZ ( ctx = None ) ¶
-
Round towards zero.
See Section 4.2 of the IEEE standard <https://doi.org/10.1109/IEEESTD.2019.8766229> or wikipedia <https://en.wikipedia.org/wiki/Floating-point_arithmetic#Rounding_modes> for details on rounding modes.
>>> x, y = FPs('x y', FPSort(8, 24)) >>> fpMul(RTZ(), x, y) x * y
- cvc5.pythonic. get_default_rounding_mode ( ctx = None ) ¶
-
Retrieves the global default rounding mode.
- cvc5.pythonic. set_default_rounding_mode ( rm , ctx = None ) ¶
-
Set the default rounding mode
>>> x, y = FPs('x y', Float32()) >>> set_default_rounding_mode(RTN()) >>> sum1 = x + y >>> set_default_rounding_mode(RTP()) >>> sum2 = x + y >>> print((sum1 == sum2).sexpr()) (= (fp.add roundTowardNegative x y) (fp.add roundTowardPositive x y)) >>> s = SolverFor("QF_FP") >>> s += sum1 != sum2 >>> s.check() sat >>> m = s.model() >>> assert str(m[sum1]) != str(m[sum2])
Note the the FP term builders can take an explicit rounding mode.
- cvc5.pythonic. get_default_fp_sort ( ctx = None ) ¶
- cvc5.pythonic. set_default_fp_sort ( ebits , sbits , ctx = None ) ¶
Classes (with overloads) ¶
- class cvc5.pythonic. FPSortRef ( ast , ctx = None ) ¶
-
Floating-point sort.
- cast ( val ) ¶
-
Try to cast val as a floating-point expression. >>> b = FPSort(8, 24) >>> b.cast(1.0) 1 >>> b.cast(1.0).sexpr() ‘(fp #b0 #b01111111 #b00000000000000000000000)’
- ebits ( ) ¶
-
Retrieves the number of bits reserved for the exponent in the FloatingPoint sort self . >>> b = FPSort(8, 24) >>> b.ebits() 8
- sbits ( ) ¶
-
Retrieves the number of bits reserved for the significand in the FloatingPoint sort self . >>> b = FPSort(8, 24) >>> b.sbits() 24
- class cvc5.pythonic. FPRef ( ast , ctx = None , reverse_children = False ) ¶
-
Floating-point expressions.
- __add__ ( other ) ¶
-
Create the SMT expression self + other .
>>> x = FP('x', FPSort(8, 24)) >>> y = FP('y', FPSort(8, 24)) >>> x + y x + y >>> (x + y).sort() FPSort(8, 24)
- __div__ ( other ) ¶
-
Create the SMT expression self / other .
>>> x = FP('x', FPSort(8, 24)) >>> y = FP('y', FPSort(8, 24)) >>> x / y x / y >>> (x / y).sort() FPSort(8, 24) >>> 10 / y 1.25*(2**3) / y
- __ge__ ( other ) ¶
-
Return self>=value.
- __gt__ ( other ) ¶
-
Return self>value.
- __le__ ( other ) ¶
-
Return self<=value.
- __lt__ ( other ) ¶
-
Return self<value.
- __mod__ ( other ) ¶
-
Create the SMT expression mod self % other .
- __mul__ ( other ) ¶
-
Create the SMT expression self * other .
>>> x = FP('x', FPSort(8, 24)) >>> y = FP('y', FPSort(8, 24)) >>> x * y x * y >>> (x * y).sort() FPSort(8, 24) >>> 10 * y 1.25*(2**3) * y
- __neg__ ( ) ¶
-
Create the SMT expression -self .
>>> x = FP('x', Float32()) >>> -x -x
- __pos__ ( ) ¶
-
Create the SMT expression +self .
- __radd__ ( other ) ¶
-
Create the SMT expression other + self .
>>> x = FP('x', FPSort(8, 24)) >>> 10 + x 1.25*(2**3) + x
- __rdiv__ ( other ) ¶
-
Create the SMT expression other / self .
>>> x = FP('x', FPSort(8, 24)) >>> y = FP('y', FPSort(8, 24)) >>> x / y x / y >>> x / 10 x / 1.25*(2**3)
- __rmod__ ( other ) ¶
-
Create the SMT expression mod other % self .
- __rmul__ ( other ) ¶
-
Create the SMT expression other * self .
>>> x = FP('x', FPSort(8, 24)) >>> y = FP('y', FPSort(8, 24)) >>> x * y x * y >>> x * 10 x * 1.25*(2**3)
- __rsub__ ( other ) ¶
-
Create the SMT expression other - self .
>>> x = FP('x', FPSort(8, 24)) >>> 10 - x 1.25*(2**3) - x
- __rtruediv__ ( other ) ¶
-
Create the SMT expression division other / self .
- __sub__ ( other ) ¶
-
Create the SMT expression self - other .
>>> x = FP('x', FPSort(8, 24)) >>> y = FP('y', FPSort(8, 24)) >>> x - y x - y >>> (x - y).sort() FPSort(8, 24)
- __truediv__ ( other ) ¶
-
Create the SMT expression division self / other .
- as_string ( ) ¶
-
Return a SMT floating point expression as a Python string.
- ebits ( ) ¶
-
Retrieves the number of bits reserved for the exponent in the FloatingPoint expression self . >>> b = FPSort(8, 24) >>> b.ebits() 8
- sbits ( ) ¶
-
Retrieves the number of bits reserved for the exponent in the FloatingPoint expression self . >>> b = FPSort(8, 24) >>> b.sbits() 24
- sort ( ) ¶
-
Return the sort of the floating-point expression self .
>>> x = FP('1.0', FPSort(8, 24)) >>> x.sort() FPSort(8, 24) >>> x.sort() == FPSort(8, 24) True
- class cvc5.pythonic. FPNumRef ( ast , ctx = None , reverse_children = False ) ¶
-
- as_string ( ) ¶
-
The string representation of the numeral.
>>> x = FPVal(20, FPSort(8, 24)) >>> print(x.as_string()) 1.25*(2**4)
- exponent ( biased = True ) ¶
-
The exponent of the numeral.
>>> x = FPVal(2.5, FPSort(8, 24)) >>> x.exponent() 1
- exponent_as_long ( ) ¶
-
The exponent of the numeral as a long.
>>> x = FPVal(2.5, FPSort(8, 24)) >>> x.exponent_as_long() 1
- isInf ( ) ¶
-
Indicates whether the numeral is +oo or -oo.
- isNaN ( ) ¶
-
Indicates whether the numeral is a NaN.
- isNegative ( ) ¶
-
Indicates whether the numeral is negative.
- isNormal ( ) ¶
-
Indicates whether the numeral is normal.
- isPositive ( ) ¶
-
Indicates whether the numeral is positive.
- isSubnormal ( ) ¶
-
Indicates whether the numeral is subnormal.
- isZero ( ) ¶
-
Indicates whether the numeral is +zero or -zero.
- sign ( ) ¶
-
The sign of the numeral.
>>> x = FPVal(+1.0, FPSort(8, 24)) >>> x.sign() False >>> x = FPVal(-1.0, FPSort(8, 24)) >>> x.sign() True
- significand ( ) ¶
-
The significand of the numeral, as a double
>>> x = FPVal(2.5, FPSort(8, 24)) >>> x.significand() 1.25
- significand_as_long ( ) ¶
-
The significand of the numeral as a long.
This is missing the 1
>>> x = FPVal(2.5, FPSort(8, 24)) >>> x.significand_as_long() 2097152