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 Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

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
type MirroredLabel <: String

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
def productElementNames: Iterator[String]
Inherited from
Product
def productIterator: Iterator[Any]
Inherited from
Product