Safe Haskell | None |
---|---|
Language | Haskell2010 |
Working with floats of dynamic sizes. This should probably be moved to What4 one day.
Synopsis
- data SFloat sym where
- fpReprOf :: IsExpr (SymExpr sym) => sym -> SymFloat sym fpp -> FloatPrecisionRepr fpp
- fpSize :: SFloat sym -> (Integer, Integer)
- fpFresh :: IsSymExprBuilder sym => sym -> Integer -> Integer -> IO (SFloat sym)
- fpNaN :: IsExprBuilder sym => sym -> Integer -> Integer -> IO (SFloat sym)
- fpPosInf :: IsExprBuilder sym => sym -> Integer -> Integer -> IO (SFloat sym)
- fpFromRationalLit :: IsExprBuilder sym => sym -> Integer -> Integer -> Rational -> IO (SFloat sym)
- fpFromBinary :: IsExprBuilder sym => sym -> Integer -> Integer -> SWord sym -> IO (SFloat sym)
- fpToBinary :: IsExprBuilder sym => sym -> SFloat sym -> IO (SWord sym)
- type SFloatRel sym = sym -> SFloat sym -> SFloat sym -> IO (Pred sym)
- fpEq :: IsExprBuilder sym => SFloatRel sym
- fpEqIEEE :: IsExprBuilder sym => SFloatRel sym
- fpLtIEEE :: IsExprBuilder sym => SFloatRel sym
- fpGtIEEE :: IsExprBuilder sym => SFloatRel sym
- type SFloatBinArith sym = sym -> RoundingMode -> SFloat sym -> SFloat sym -> IO (SFloat sym)
- fpNeg :: IsExprBuilder sym => sym -> SFloat sym -> IO (SFloat sym)
- fpAdd :: IsExprBuilder sym => SFloatBinArith sym
- fpSub :: IsExprBuilder sym => SFloatBinArith sym
- fpMul :: IsExprBuilder sym => SFloatBinArith sym
- fpDiv :: IsExprBuilder sym => SFloatBinArith sym
- fpRound :: IsExprBuilder sym => sym -> RoundingMode -> SFloat sym -> IO (SFloat sym)
- fpToReal :: IsExprBuilder sym => sym -> SFloat sym -> IO (SymReal sym)
- fpFromReal :: IsExprBuilder sym => sym -> Integer -> Integer -> RoundingMode -> SymReal sym -> IO (SFloat sym)
- fpFromRational :: IsExprBuilder sym => sym -> Integer -> Integer -> RoundingMode -> SymInteger sym -> SymInteger sym -> IO (SFloat sym)
- fpToRational :: IsSymExprBuilder sym => sym -> SFloat sym -> IO (Pred sym, SymInteger sym, SymInteger sym)
- fpFromInteger :: IsExprBuilder sym => sym -> Integer -> Integer -> RoundingMode -> SymInteger sym -> IO (SFloat sym)
- fpIsInf :: IsExprBuilder sym => sym -> SFloat sym -> IO (Pred sym)
- fpIsNaN :: IsExprBuilder sym => sym -> SFloat sym -> IO (Pred sym)
- data UnsupportedFloat = UnsupportedFloat {}
- data FPTypeError = FPTypeError {}
Interface
Constants
fpFresh :: IsSymExprBuilder sym => sym -> Integer -> Integer -> IO (SFloat sym) Source #
A fresh variable of the given type.
:: IsExprBuilder sym | |
=> sym | |
-> Integer | Exponent width |
-> Integer | Precision width |
-> IO (SFloat sym) |
Not a number
:: IsExprBuilder sym | |
=> sym | |
-> Integer | Exponent width |
-> Integer | Precision width |
-> IO (SFloat sym) |
Positive infinity
:: IsExprBuilder sym | |
=> sym | |
-> Integer | Exponent width |
-> Integer | Precision width |
-> Rational | |
-> IO (SFloat sym) |
A floating point number corresponding to the given rations.
Interchange formats
:: IsExprBuilder sym | |
=> sym | |
-> Integer | Exponent width |
-> Integer | Precision width |
-> SWord sym | |
-> IO (SFloat sym) |
Make a floating point number with the given bit representation.
fpToBinary :: IsExprBuilder sym => sym -> SFloat sym -> IO (SWord sym) Source #
Relations
fpEq :: IsExprBuilder sym => SFloatRel sym Source #
fpEqIEEE :: IsExprBuilder sym => SFloatRel sym Source #
fpLtIEEE :: IsExprBuilder sym => SFloatRel sym Source #
fpGtIEEE :: IsExprBuilder sym => SFloatRel sym Source #
Arithmetic
type SFloatBinArith sym = sym -> RoundingMode -> SFloat sym -> SFloat sym -> IO (SFloat sym) Source #
fpAdd :: IsExprBuilder sym => SFloatBinArith sym Source #
fpSub :: IsExprBuilder sym => SFloatBinArith sym Source #
fpMul :: IsExprBuilder sym => SFloatBinArith sym Source #
fpDiv :: IsExprBuilder sym => SFloatBinArith sym Source #
Conversions
fpRound :: IsExprBuilder sym => sym -> RoundingMode -> SFloat sym -> IO (SFloat sym) Source #
fpToReal :: IsExprBuilder sym => sym -> SFloat sym -> IO (SymReal sym) Source #
This is undefined on "special" values (NaN,infinity)
fpFromReal :: IsExprBuilder sym => sym -> Integer -> Integer -> RoundingMode -> SymReal sym -> IO (SFloat sym) Source #
fpFromRational :: IsExprBuilder sym => sym -> Integer -> Integer -> RoundingMode -> SymInteger sym -> SymInteger sym -> IO (SFloat sym) Source #
fpToRational :: IsSymExprBuilder sym => sym -> SFloat sym -> IO (Pred sym, SymInteger sym, SymInteger sym) Source #
Returns a predicate and two integers, x
and y
.
If the the predicate holds, then x / y
is a rational representing
the floating point number. Assumes the FP number is not one of the
special ones that has no real representation.
fpFromInteger :: IsExprBuilder sym => sym -> Integer -> Integer -> RoundingMode -> SymInteger sym -> IO (SFloat sym) Source #
Queries
Exceptions
data UnsupportedFloat Source #
This exception is thrown if the operations try to create a floating point value we do not support
Instances
Show UnsupportedFloat Source # | |
Defined in Cryptol.Eval.What4.SFloat showsPrec :: Int -> UnsupportedFloat -> ShowS # show :: UnsupportedFloat -> String # showList :: [UnsupportedFloat] -> ShowS # | |
Exception UnsupportedFloat Source # | |
Defined in Cryptol.Eval.What4.SFloat |
data FPTypeError Source #
This exceptoin is throws if the types don't match.
Instances
Show FPTypeError Source # | |
Defined in Cryptol.Eval.What4.SFloat showsPrec :: Int -> FPTypeError -> ShowS # show :: FPTypeError -> String # showList :: [FPTypeError] -> ShowS # | |
Exception FPTypeError Source # | |
Defined in Cryptol.Eval.What4.SFloat |