BFMSS

@SerialVersionUID(0L)
case object BFMSS extends ZeroBoundFunction

An implementation of "A Separation Bound for Real Algebraic Expressions", by Burnikel, Funke, Mehlhorn, Schirra, and Schmitt. This provides a good ZeroBoundFunction for use in sign tests.

Unlike the paper, we use log-arithmetic instead of working with exact, big integer values. This means our bound isn't technically as good as it could be, but we save the cost of working with arithmetic. We also perform all log arithmetic using Longs and check for overflow (throwing ArithmeticExceptions when detected). In practice we shouldn't hit this limit, but in case we do, we prefer to throw over failing silently.

trait Singleton
trait Product
trait Mirror
trait Product
trait Equals
class Object
trait Matchable
class Any
BFMSS.type

Type members

Classlikes

final case class Bound(l: Long, u: Long)

Our state that we store, per node.

Our state that we store, per node.

Inherited types

type MirroredElemLabels = EmptyTuple
Inherited from:
Singleton
type MirroredElemTypes = EmptyTuple
Inherited from:
Singleton

The name of the type

The name of the type

Inherited from:
Mirror
type MirroredMonoType = Singleton
Inherited from:
Singleton
type MirroredType = Singleton
Inherited from:
Singleton

Value members

Concrete methods

def apply(expr: Expr): Bound

Inherited methods

def fromProduct(p: Product): MirroredMonoType
Inherited from:
Singleton
Inherited from:
Product