Package

spire

math

Permalink

package math

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. math
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. case class Above[A] extends Interval[A] with Product with Serializable

    Permalink
  2. final class Algebraic extends ScalaNumber with ScalaNumericConversions with Serializable

    Permalink

    Algebraic provides an exact number type for algebraic numbers.

    Algebraic provides an exact number type for algebraic numbers. Algebraic numbers are roots of polynomials with rational coefficients. With it, we can represent expressions involving addition, multiplication, division, n-roots (eg. sqrt or cbrt), and roots of rational polynomials. So, it is similar Rational, but adds roots as a valid, exact operation. The cost is that this will not be as fast as Rational for many operations.

    In general, you can assume all operations on this number type are exact, except for those that explicitly construct approximations to an Algebraic number, such as toBigDecimal.

    For an overview of the ideas, algorithms, and proofs of this number type, you can read the following papers:

    • "On Guaranteed Accuracy Computation." C. K. Yap.
    • "Recent Progress in Exact Geometric Computation." C. Li, S. Pion, and C. K. Yap.
    • "A New Constructive Root Bound for Algebraic Expressions" by C. Li & C. K. Yap.
    • "A Separation Bound for Real Algebraic Expressions." C. Burnikel, et al.
    Annotations
    @SerialVersionUID()
  3. class AlgebraicAlgebra extends AlgebraicIsField with AlgebraicIsNRoot with AlgebraicIsReal with Serializable

    Permalink
    Annotations
    @SerialVersionUID()
  4. trait AlgebraicInstances extends AnyRef

    Permalink
  5. case class All[A] extends Interval[A] with Product with Serializable

    Permalink
  6. case class Below[A] extends Interval[A] with Product with Serializable

    Permalink
  7. abstract class BinaryMerge extends AnyRef

    Permalink

    Abstract class that can be used to implement custom binary merges with e.g.

    Abstract class that can be used to implement custom binary merges with e.g. special collision behavior or an ordering that is not defined via an Order[T] typeclass

  8. trait BitString[A] extends Bool[A]

    Permalink
  9. case class Bounded[A] extends Interval[A] with Product with Serializable

    Permalink
  10. final case class Complex[T](real: T, imag: T) extends ScalaNumber with ScalaNumericConversions with Serializable with Product

    Permalink

    Complex numbers.

    Complex numbers. Depending on the underlying scalar T, can represent the Gaussian integers (T = BigInt/SafeLong), the Gaussian rationals (T = Rational) or the complex number field (T: Field).

    Note that we require T to be at least CRing, a commutative ring, so the implementation below is slightly less general than the Cayley-Dickson construction.

    Annotations
    @SerialVersionUID()
  11. trait ComplexInstances extends ComplexInstances1

    Permalink
  12. trait ComplexInstances0 extends AnyRef

    Permalink
  13. trait ComplexInstances1 extends ComplexInstances0

    Permalink
  14. trait ConvertableFrom[A] extends Any

    Permalink
  15. trait ConvertableTo[A] extends Any

    Permalink
  16. case class Empty[A] extends Interval[A] with Product with Serializable

    Permalink
  17. final class FloatComplex extends AnyVal

    Permalink

    Value class which encodes two floating point values in a Long.

    Value class which encodes two floating point values in a Long.

    We get (basically) unboxed complex numbers using this hack. The underlying implementation lives in the FastComplex object.

  18. final class FpFilter[A] extends AnyRef

    Permalink

    A Floating-point Filter [1] provides a Numeric type that wraps another Numeric type, but defers its computation, instead providing a floating point (Double) approximation.

    A Floating-point Filter [1] provides a Numeric type that wraps another Numeric type, but defers its computation, instead providing a floating point (Double) approximation. For some operations, like signum, comparisons, equality checks, toFloat, etc, the Double approximation may be used to compute the result, rather than having to compute the exact value.

    An FpFilter can generally be used with any Ring numeric type (also supports EuclideanRing, Field, and NRoot). However, it should be kept in mind that FpFilter knows nothing about the type its wrapping and assumes that, generally, it is more accurate than it is. When an FpFilter cannot determine an answer to some predicate exactly, it will defer to the wrapped value, so it probably doesn't make sense to wrap Ints, when an Int will overflow before a Double!

    Good candidates to wrap in FpFilter are BigInts, Rationals, BigDecimals, and Algebraic. Note that while Algebraic has an internal floating-point filter, this still provides benefits. Namely, the operator-fusion and allocation removal provided by the macros can make for much faster hot paths.

    Note: Both equals and hashCode will generally force the exact computation. They should be avoided (prefer === for equals)... otherwise why use bother?

    [1] Burnikel, Funke, Seel. Exact Geometric Computation Using Cascading. SoCG 1998.

  19. final class FpFilterApprox[A] extends AnyVal

    Permalink
  20. final class FpFilterExact[A] extends AnyVal

    Permalink
  21. trait Fractional[A] extends Field[A] with NRoot[A] with Integral[A]

    Permalink
  22. trait HighBranchingMedianOf5 extends AnyRef

    Permalink
  23. trait Integral[A] extends EuclideanRing[A] with ConvertableFrom[A] with ConvertableTo[A] with IsReal[A]

    Permalink

    Integral number types, where / is truncated division.

  24. class IntegralOps[A] extends AnyRef

    Permalink
  25. sealed abstract class Interval[A] extends Serializable

    Permalink

    Interval represents a set of values, usually numbers.

    Interval represents a set of values, usually numbers.

    Intervals have upper and lower bounds. Each bound can be one of four kinds:

    * Closed: The boundary value is included in the interval. * Open: The boundary value is excluded from the interval. * Unbound: There is no boundary value. * Empty: The interval itself is empty.

    When the underlying type of the interval supports it, intervals may be used in arithmetic. There are several possible interpretations of interval arithmetic: the interval can represent uncertainty about a single value (for instance, a quantity +/- tolerance in engineering) or it can represent all values in the interval simultaneously. In this implementation we have chosen to use the probabillistic interpretation.

    One common pitfall with interval arithmetic is that many familiar algebraic relations do not hold. For instance, given two intervals a and b:

    a == b does not imply a * a == a * b

    Consider a = b = [-1, 1]. Since any number times itself is non-negative, a * a = [0, 1]. However, a * b = [-1, 1], since we may actually have a=1 and b=-1.

    These situations will result in loss of precision (in the form of wider intervals). The result is not wrong per se, but less accurate than it could be.

    These intervals should not be used with floating point bounds, as proper rounding is not implemented. Generally, the JVM is not an easy platform to perform robust arithmetic, as the IEEE 754 rounding modes cannot be set.

  26. final case class Jet[T](real: T, infinitesimal: Array[T]) extends ScalaNumber with ScalaNumericConversions with Serializable with Product

    Permalink
    Annotations
    @SerialVersionUID()
  27. case class JetDim(dimension: Int) extends Product with Serializable

    Permalink

    Used to implicitly define the dimensionality of the Jet space.

    Used to implicitly define the dimensionality of the Jet space.

    dimension

    the number of dimensions.

  28. trait JetInstances extends AnyRef

    Permalink
  29. trait Merge extends Any

    Permalink

    Interface for a merging strategy object.

  30. sealed abstract class Natural extends ScalaNumber with ScalaNumericConversions with Serializable

    Permalink
    Annotations
    @SerialVersionUID()
  31. class NaturalAlgebra extends NaturalIsCRig with NaturalTruncatedDivision with Serializable

    Permalink
    Annotations
    @SerialVersionUID()
  32. trait NaturalInstances extends AnyRef

    Permalink
  33. sealed trait Number extends ScalaNumber with ScalaNumericConversions with Serializable

    Permalink
  34. class NumberAlgebra extends NumberIsField with NumberIsNRoot with NumberIsTrig with NumberIsReal with Serializable

    Permalink
    Annotations
    @SerialVersionUID()
  35. trait NumberInstances extends AnyRef

    Permalink
  36. trait NumberTag[A] extends AnyRef

    Permalink

    A NumberTag provides information about important implementations details of numbers.

    A NumberTag provides information about important implementations details of numbers. For instance, it includes information about whether we can expect arithmetic to overflow or produce invalid values, the bounds of the number if they exist, whether it is an approximate or exact number type, etc.

  37. trait Numeric[A] extends Ring[A] with AdditiveAbGroup[A] with MultiplicativeAbGroup[A] with NRoot[A] with ConvertableFrom[A] with ConvertableTo[A] with IsReal[A]

    Permalink

    TODO 3.

    TODO 3. LiteralOps? Literal conversions? 4. Review operator symbols? 5. Support for more operators? 6. Start to worry about things like e.g. pow(BigInt, BigInt)

  38. case class Point[A] extends Interval[A] with Product with Serializable

    Permalink
  39. trait Polynomial[C] extends AnyRef

    Permalink
  40. trait PolynomialEq[C] extends Eq[Polynomial[C]]

    Permalink
  41. trait PolynomialInstances extends PolynomialInstances4

    Permalink
  42. trait PolynomialInstances0 extends AnyRef

    Permalink
  43. trait PolynomialInstances1 extends PolynomialInstances0

    Permalink
  44. trait PolynomialInstances2 extends PolynomialInstances1

    Permalink
  45. trait PolynomialInstances3 extends PolynomialInstances2

    Permalink
  46. trait PolynomialInstances4 extends PolynomialInstances3

    Permalink
  47. trait PolynomialOverCRing[C] extends CRing[Polynomial[C]] with PolynomialOverRing[C] with RingAssociativeAlgebra[Polynomial[C], C]

    Permalink
  48. trait PolynomialOverField[C] extends PolynomialOverRing[C] with WithEuclideanAlgorithm[Polynomial[C]] with VectorSpace[Polynomial[C], C] with FieldAssociativeAlgebra[Polynomial[C], C]

    Permalink
  49. trait PolynomialOverRig[C] extends PolynomialOverSemiring[C] with Rig[Polynomial[C]]

    Permalink
  50. trait PolynomialOverRing[C] extends PolynomialOverRng[C] with Ring[Polynomial[C]]

    Permalink
  51. trait PolynomialOverRng[C] extends PolynomialOverSemiring[C] with Rng[Polynomial[C]]

    Permalink
  52. trait PolynomialOverSemiring[C] extends Semiring[Polynomial[C]]

    Permalink
  53. final case class Quaternion[A](r: A, i: A, j: A, k: A) extends ScalaNumber with ScalaNumericConversions with Serializable with Product

    Permalink

    Quaternions defined over a subset A of the real numbers.

  54. trait QuaternionInstances extends QuaternionInstances1

    Permalink
  55. trait QuaternionInstances1 extends AnyRef

    Permalink
  56. sealed abstract class Rational extends ScalaNumber with ScalaNumericConversions with Ordered[Rational]

    Permalink
  57. class RationalAlgebra extends RationalIsField with RationalIsReal with Serializable

    Permalink
    Annotations
    @SerialVersionUID()
  58. trait RationalInstances extends AnyRef

    Permalink
  59. sealed trait Real extends ScalaNumber with ScalaNumericConversions

    Permalink
  60. class RealAlgebra extends RealIsFractional

    Permalink
    Annotations
    @SerialVersionUID()
  61. trait RealInstances extends AnyRef

    Permalink
  62. trait RealIsFractional extends Fractional[Real] with TruncatedDivisionCRing[Real] with Trig[Real] with WithDefaultGCD[Real]

    Permalink
  63. sealed abstract class SafeLong extends ScalaNumber with ScalaNumericConversions with Ordered[SafeLong]

    Permalink

    Provides a type to do safe long arithmetic.

    Provides a type to do safe long arithmetic. This type will never overflow, but rather convert the underlying long to a BigInteger as need and back down to a Long when possible.

  64. trait SafeLongInstances extends AnyRef

    Permalink
  65. trait Select extends Any

    Permalink
  66. trait SelectLike extends Select

    Permalink

    Given a function for finding approximate medians, this will create an exact median finder.

  67. trait Sort extends Any

    Permalink

    Interface for a sorting strategy object.

  68. final class Trilean extends AnyVal

    Permalink

    Implementation of three-valued logic.

    Implementation of three-valued logic.

    This type resembles Boolean, but has three values instead of two:

    • Trilean.True (equivalent to true)
    • Trilean.False (equivalent to false)
    • Trilean.Unknown

    Trilean supports the same operations that Boolean does, and as long as all values are True or False, the results will be the same. However, the truth tables have to be extended to work with unknown:

    not: -+- T|F U|U F|T

    and: |T U F -+----- T|T U F U|U U F F|F F F

    or: |T U F -+----- T|T T T U|T U U F|T U F

    Trilean is implemented as a value type, so in most cases it will only have the overhead of a single Int. However, in some situations it will be boxed.

  69. class TrileanAlgebra extends Heyting[Trilean]

    Permalink
  70. final class UByte extends AnyVal with ScalaNumericAnyConversions

    Permalink
  71. trait UByteInstances extends AnyRef

    Permalink
  72. final class UInt extends AnyVal

    Permalink
  73. trait UIntInstances extends AnyRef

    Permalink
  74. final class ULong extends AnyVal

    Permalink
  75. trait ULongInstances extends AnyRef

    Permalink
  76. final class UShort extends AnyVal

    Permalink
  77. trait UShortInstances extends AnyRef

    Permalink

Value Members

  1. object Algebraic extends AlgebraicInstances with Serializable

    Permalink
  2. object BinaryMerge extends Merge

    Permalink

    Merge that uses binary search to reduce the number of comparisons

    Merge that uses binary search to reduce the number of comparisons

    This can be orders of magnitude quicker than a linear merge for types that have a relatively expensive comparison operation (e.g. Rational, BigInt, tuples) and will not be much slower than linear merge even in the worst case for types that have a very fast comparison (e.g. Int)

  3. object BitString extends Serializable

    Permalink
  4. object Complex extends ComplexInstances with Serializable

    Permalink
  5. object ConvertableFrom

    Permalink
  6. object ConvertableTo

    Permalink
  7. object FastComplex

    Permalink

    FastComplex is an ugly, beautiful hack.

    FastComplex is an ugly, beautiful hack.

    The basic idea is to encode two 32-bit Floats into a single 64-bit Long. The lower-32 bits are the "real" Float and the upper-32 are the "imaginary" Float.

    Since we're overloading the meaning of Long, all the operations have to be defined on the FastComplex object, meaning the syntax for using this is a bit ugly. To add to the ugly beauty of the whole thing I could imagine defining implicit operators on Long like +@, -@, *@, /@, etc.

    You might wonder why it's even worth doing this. The answer is that when you need to allocate an array of e.g. 10-20 million complex numbers, the GC overhead of using *any* object is HUGE. Since we can't build our own "pass-by-value" types on the JVM we are stuck doing an encoding like this.

    Here are some profiling numbers for summing an array of complex numbers, timed against a concrete case class implementation using Float (in ms):

    size | encoded | class 1M | 5.1 | 5.8 5M | 28.5 | 91.7 10M | 67.7 | 828.1 20M | 228.0 | 2687.0

    Not bad, eh?

  8. object FloatComplex

    Permalink
  9. object FpFilter

    Permalink
  10. object FpFilterApprox

    Permalink
  11. object FpFilterExact

    Permalink
  12. object Fractional extends Serializable

    Permalink
  13. final def IEEEremainder(x: Double, d: Double): Double

    Permalink
  14. object InsertionSort extends Sort

    Permalink

    An implementation of insertion sort.

    An implementation of insertion sort.

    Works well for small arrays but due to quadratic complexity is not generally optimal.

  15. object Integral extends Serializable

    Permalink
  16. object Interval extends Serializable

    Permalink
  17. object Jet extends JetInstances with Serializable

    Permalink

    A simple implementation of N-dimensional dual numbers, for automatically computing exact derivatives of functions.

    Overview

    A simple implementation of N-dimensional dual numbers, for automatically computing exact derivatives of functions. This code (and documentation) closely follow the one in Google's "Ceres" library of non-linear least-squares solvers (see Sameer Agarwal, Keir Mierle, and others: Ceres Solver.)

    While a complete treatment of the mechanics of automatic differentiation is beyond the scope of this header (see http://en.wikipedia.org/wiki/Automatic_differentiation for details), the basic idea is to extend normal arithmetic with an extra element "h" such that h != 0, but h2 = 0. Dual numbers are extensions of the real numbers analogous to complex numbers: whereas complex numbers augment the reals by introducing an imaginary unit i such that i2 = -1, dual numbers introduce an "infinitesimal" unit h such that h2 = 0. Analogously to a complex number c = x + y*i, a dual number d = x * y*h has two components: the "real" component x, and an "infinitesimal" component y. Surprisingly, this leads to a convenient method for computing exact derivatives without needing to manipulate complicated symbolic expressions.

    For example, consider the function

    f(x) = x * x ,

    evaluated at 10. Using normal arithmetic, f(10) = 100, and df/dx(10) = 20. Next, augment 10 with an infinitesimal h to get:

    f(10 + h) = (10 + h) * (10 + h)
              = 100 + 2 * 10 * h + h * h
              = 100 + 20 * h       +---
                      +-----       |
                      |            +--- This is zero
                      |
                      +----------------- This is df/dx

    Note that the derivative of f with respect to x is simply the infinitesimal component of the value of f(x + h). So, in order to take the derivative of any function, it is only necessary to replace the numeric "object" used in the function with one extended with infinitesimals. The class Jet, defined in this header, is one such example of this, where substitution is done with generics.

    To handle derivatives of functions taking multiple arguments, different infinitesimals are used, one for each variable to take the derivative of. For example, consider a scalar function of two scalar parameters x and y:

    f(x, y) = x * x + x * y

    Following the technique above, to compute the derivatives df/dx and df/dy for f(1, 3) involves doing two evaluations of f, the first time replacing x with x + h, the second time replacing y with y + h.

    For df/dx:

    f(1 + h, y) = (1 + h) * (1 + h) + (1 + h) * 3
                = 1 + 2 * h + 3 + 3 * h
                = 4 + 5 * h
    
    Therefore df/dx = 5

    For df/dy:

    f(1, 3 + h) = 1 * 1 + 1 * (3 + h)
                = 1 + 3 + h
                = 4 + h
    
    Therefore df/dy = 1

    To take the gradient of f with the implementation of dual numbers ("jets") in this file, it is necessary to create a single jet type which has components for the derivative in x and y, and pass them to a routine computing function f. It is convenient to use a generic version of f, that can be called also with non-jet numbers for standard evaluation:

    def f[@specialized(Double) T : Field](x: T, y: T): T = x * x + x * y
    
    val xValue = 9.47892774
    val yValue = 0.287740
    
    // The "2" means there should be 2 dual number components.
    implicit val dimension = JetDim(2)
    val x: Jet[Double] = xValue + Jet.h[Double](0);  // Pick the 0th dual number for x.
    val y: Jet[Double] = yValue + Jet.h[Double](1);  // Pick the 1th dual number for y.
    
    val z: Jet[Double] = f(x, y);
    println("df/dx = " + z.infinitesimal(0) + ", df/dy = " + z.infinitesimal(1));

    For the more mathematically inclined, this file implements first-order "jets". A 1st order jet is an element of the ring

    T[N] = T[t_1, ..., t_N] / (t_1, ..., t_N)^2

    which essentially means that each jet consists of a "scalar" value 'a' from T and a 1st order perturbation vector 'v' of length N:

    x = a + \sum_i v[i] t_i

    A shorthand is to write an element as x = a + u, where u is the perturbation. Then, the main point about the arithmetic of jets is that the product of perturbations is zero:

    (a + u) * (b + v) = ab + av + bu + uv
                      = ab + (av + bu) + 0

    which is what operator* implements below. Addition is simpler:

    (a + u) + (b + v) = (a + b) + (u + v).

    The only remaining question is how to evaluate the function of a jet, for which we use the chain rule:

    f(a + u) = f(a) + f'(a) u

    where f'(a) is the (scalar) derivative of f at a.

    By pushing these things through generics, we can write routines that at same time evaluate mathematical functions and compute their derivatives through automatic differentiation.

  18. object LinearMerge extends Merge

    Permalink

    Simple linear merge

  19. object LinearSelect extends SelectLike with HighBranchingMedianOf5

    Permalink
  20. object MergeSort extends Sort

    Permalink

    In-place merge sort implementation.

    In-place merge sort implementation. This sort is stable but does mutate the given array. It is an in-place sort but it does allocate a temporary array of the same size as the input. It uses InsertionSort for sorting very small arrays.

  21. object Natural extends NaturalInstances with Serializable

    Permalink
  22. object Number extends NumberInstances with Serializable

    Permalink

    Convenient apply and implicits for Numbers

  23. object NumberTag

    Permalink
  24. object Numeric extends Serializable

    Permalink
  25. object Polynomial extends PolynomialInstances

    Permalink

    Polynomial A univariate polynomial class and EuclideanRing extension trait for arithmetic operations.

    Polynomial A univariate polynomial class and EuclideanRing extension trait for arithmetic operations. Polynomials can be instantiated using any type C for which a Ring[C] and Eq[C] are in scope, with exponents given by Int values. Some operations require more precise algebraic structures, such as GCDRing, EuclideanRing or Field to be in scope.

  26. object Quaternion extends QuaternionInstances with Serializable

    Permalink
  27. object QuickSelect extends SelectLike with HighBranchingMedianOf5

    Permalink
  28. object QuickSort

    Permalink

    In-place quicksort implementation.

    In-place quicksort implementation. It is not stable, but does not allocate extra space (other than stack). Like MergeSort, it uses InsertionSort for sorting very small arrays.

  29. object Rational extends RationalInstances with Serializable

    Permalink
  30. object Real extends RealInstances with Serializable

    Permalink
  31. object SafeLong extends SafeLongInstances with Serializable

    Permalink
  32. object Searching

    Permalink
  33. object Selection

    Permalink
  34. object Sorting

    Permalink

    Object providing in-place sorting capability for arrays.

    Object providing in-place sorting capability for arrays.

    Sorting.sort() uses quickSort() by default (in-place, not stable, generally fastest but might hit bad cases where it is quadratic. Also provides mergeSort() (in-place, stable, uses extra memory, still pretty fast) and insertionSort(), which is slow except for small arrays.

  35. object Trilean

    Permalink
  36. object UByte extends UByteInstances

    Permalink
  37. object UInt extends UIntInstances

    Permalink
  38. object ULong extends ULongInstances

    Permalink
  39. object UShort extends UShortInstances

    Permalink
  40. final def abs[A](a: A)(implicit ev: Signed[A]): A

    Permalink
  41. final def abs(n: Double): Double

    Permalink
  42. final def abs(n: Float): Float

    Permalink
  43. final def abs(n: Long): Long

    Permalink
  44. final def abs(n: Int): Int

    Permalink
  45. final def abs(n: Short): Short

    Permalink
  46. final def abs(n: Byte): Byte

    Permalink

    abs

  47. final def acos[A](a: A)(implicit ev: Trig[A]): A

    Permalink
  48. final def asin[A](a: A)(implicit ev: Trig[A]): A

    Permalink
  49. final def atan[A](a: A)(implicit ev: Trig[A]): A

    Permalink
  50. final def atan2[A](y: A, x: A)(implicit ev: Trig[A]): A

    Permalink
  51. final def cbrt(x: Double): Double

    Permalink
  52. final def ceil[A](a: A)(implicit ev: IsReal[A]): A

    Permalink
  53. final def ceil(n: BigDecimal): BigDecimal

    Permalink
  54. final def ceil(n: Double): Double

    Permalink
  55. final def ceil(n: Float): Float

    Permalink

    ceil

  56. def choose(n: Long, k: Long): BigInt

    Permalink

    choose (binomial coefficient)

  57. final def copySign(m: Float, s: Float): Float

    Permalink
  58. final def copySign(m: Double, s: Double): Double

    Permalink
  59. final def cos[A](a: A)(implicit ev: Trig[A]): A

    Permalink
  60. final def cosh(x: Double): Double

    Permalink
  61. final def cosh[A](x: A)(implicit ev: Trig[A]): A

    Permalink
  62. final def e[A](implicit ev: Trig[A]): A

    Permalink
  63. final def e: Double

    Permalink

    e

  64. def emod(a: BigInteger, b: BigInteger): BigInteger

    Permalink
  65. def emod(a: BigInt, b: BigInt): BigInt

    Permalink
  66. def emod(a: Long, b: Long): Long

    Permalink
  67. def emod(a: Int, b: Int): Int

    Permalink
  68. def emod(a: Short, b: Short): Short

    Permalink
  69. def emod(a: Byte, b: Byte): Byte

    Permalink
  70. def equot(a: BigInteger, b: BigInteger): BigInteger

    Permalink
  71. def equot(a: BigInt, b: BigInt): BigInt

    Permalink
  72. def equot(a: Long, b: Long): Long

    Permalink
  73. def equot(a: Int, b: Int): Int

    Permalink
  74. def equot(a: Short, b: Short): Short

    Permalink
  75. def equot(a: Byte, b: Byte): Byte

    Permalink
  76. def equotmod(a: BigInteger, b: BigInteger): (BigInteger, BigInteger)

    Permalink
  77. def equotmod(a: BigInt, b: BigInt): (BigInt, BigInt)

    Permalink
  78. def equotmod(a: Long, b: Long): (Long, Long)

    Permalink
  79. def equotmod(a: Int, b: Int): (Int, Int)

    Permalink
  80. def equotmod(a: Short, b: Short): (Short, Short)

    Permalink
  81. def equotmod(a: Byte, b: Byte): (Byte, Byte)

    Permalink

    Integer Euclidean division, equotmod, equot, emod

  82. final def exp[A](a: A)(implicit t: Trig[A]): A

    Permalink
  83. final def exp(k: BigDecimal): BigDecimal

    Permalink
  84. final def exp(k: Int, precision: Int): BigDecimal

    Permalink
  85. final def exp(n: Double): Double

    Permalink

    exp

  86. final def expm1(x: Double): Double

    Permalink
  87. def fact(n: Long): BigInt

    Permalink

    factorial

  88. def fib(n: Long): BigInt

    Permalink

    fibonacci

  89. final def floor[A](a: A)(implicit ev: IsReal[A]): A

    Permalink
  90. final def floor(n: BigDecimal): BigDecimal

    Permalink
  91. final def floor(n: Double): Double

    Permalink
  92. final def floor(n: Float): Float

    Permalink

    floor

  93. final def gcd[A](x: A, y: A, z: A, rest: A*)(implicit arg0: Eq[A], ev: GCDRing[A]): A

    Permalink
  94. final def gcd[A](xs: Seq[A])(implicit arg0: Eq[A], ev: GCDRing[A]): A

    Permalink
  95. final def gcd[A](x: A, y: A)(implicit arg0: Eq[A], ev: GCDRing[A]): A

    Permalink
  96. final def gcd(a: BigInt, b: BigInt): BigInt

    Permalink
  97. final def gcd(_x: Long, _y: Long): Long

    Permalink

    gcd

  98. final def getExponent(x: Float): Int

    Permalink
  99. final def getExponent(x: Double): Int

    Permalink
  100. final def hypot[A](x: A, y: A)(implicit f: Field[A], n: NRoot[A], s: Signed[A]): A

    Permalink
  101. package interval

    Permalink
  102. final def lcm[A](x: A, y: A)(implicit arg0: Eq[A], ev: GCDRing[A]): A

    Permalink
  103. final def lcm(a: BigInt, b: BigInt): BigInt

    Permalink
  104. final def lcm(x: Long, y: Long): Long

    Permalink

    lcm

  105. final def log[A](a: A, base: Int)(implicit f: Field[A], t: Trig[A]): A

    Permalink
  106. final def log[A](a: A)(implicit t: Trig[A]): A

    Permalink
  107. def log(n: BigDecimal, base: Int): BigDecimal

    Permalink
  108. final def log(n: BigDecimal): BigDecimal

    Permalink
  109. final def log(n: Double, base: Int): Double

    Permalink
  110. final def log(n: Double): Double

    Permalink

    log

  111. final def log10(x: Double): Double

    Permalink
  112. final def log1p(x: Double): Double

    Permalink
  113. final def max[A](x: A, y: A)(implicit ev: Order[A]): A

    Permalink
  114. final def max(x: Double, y: Double): Double

    Permalink
  115. final def max(x: Float, y: Float): Float

    Permalink
  116. final def max(x: Long, y: Long): Long

    Permalink
  117. final def max(x: Int, y: Int): Int

    Permalink
  118. final def max(x: Short, y: Short): Short

    Permalink
  119. final def max(x: Byte, y: Byte): Byte

    Permalink

    max

  120. final def min[A](x: A, y: A)(implicit ev: Order[A]): A

    Permalink
  121. final def min(x: Double, y: Double): Double

    Permalink
  122. final def min(x: Float, y: Float): Float

    Permalink
  123. final def min(x: Long, y: Long): Long

    Permalink
  124. final def min(x: Int, y: Int): Int

    Permalink
  125. final def min(x: Short, y: Short): Short

    Permalink
  126. final def min(x: Byte, y: Byte): Byte

    Permalink

    min

  127. final def nextAfter(x: Float, y: Float): Float

    Permalink
  128. final def nextAfter(x: Double, y: Double): Double

    Permalink
  129. final def nextUp(x: Float): Float

    Permalink
  130. final def nextUp(x: Double): Double

    Permalink
  131. def nroot(a: BigDecimal, k: Int, ctxt: MathContext): BigDecimal

    Permalink

    An implementation of the shifting n-th root algorithm for BigDecimal.

    An implementation of the shifting n-th root algorithm for BigDecimal. For the BigDecimal a, this is guaranteed to be accurate up to the precision specified in ctxt.

    See http://en.wikipedia.org/wiki/Shifting_nth_root_algorithm

    a

    A (positive if k % 2 == 0) BigDecimal.

    k

    A positive Int greater than 1.

    ctxt

    The MathContext to bound the precision of the result. returns A BigDecimal approximation to the k-th root of a.

  132. final def pi[A](implicit ev: Trig[A]): A

    Permalink
  133. final def pi: Double

    Permalink

    pi

  134. package poly

    Permalink
  135. final def pow(base: Double, exponent: Double): Double

    Permalink
  136. final def pow(base: Long, exponent: Long): Long

    Permalink

    Exponentiation function, e.g.

    Exponentiation function, e.g. x^y

    If base^ex doesn't fit in a Long, the result will overflow (unlike Math.pow which will return +/- Infinity).

  137. final def pow(base: BigInt, ex: BigInt): BigInt

    Permalink
  138. final def pow(base: BigDecimal, exponent: BigDecimal): BigDecimal

    Permalink

    pow

  139. package prime

    Permalink

    Basic tools for prime factorization.

    Basic tools for prime factorization.

    This package is intended to provide tools for factoring numbers, checking primality, generating prime numbers, etc. For now, its main contributions are a method for factoring integers (spire.math.prime.factor) and a type for representing prime factors and their exponents (spire.math.prime.Factors).

    The factorization currently happens via an implementation of Pollard-Rho with Brent's optimization. This technique works very well for composites with small prime factors (up to 10 decimal digits or so) and can support semiprimes (products of two similarly-sized primes) of 20-40 digits.

    The implementation does cheat, using BigInteger.isProbablePrime(40) to test basic primality. This has a roughly 1-in-1,000,000,000,000 chance of being wrong.

    Since Pollard-Rho uses random primes, its performance is somewhat non-deterministic. On this machine, factoring 20-digit semiprimes seem to average about 1.5s and factoring 30-digit semiprimes seem to average about 20s. Much larger numbers can be factored provided they are either prime or composites with smallish factors.

  140. final def random(): Double

    Permalink
  141. final def rint(x: Double): Double

    Permalink
  142. final def round[A](a: A)(implicit ev: IsReal[A]): A

    Permalink
  143. final def round(a: BigDecimal): BigDecimal

    Permalink
  144. final def round(a: Double): Double

    Permalink
  145. final def round(a: Float): Float

    Permalink

    round

  146. final def scalb(d: Float, s: Int): Float

    Permalink
  147. final def scalb(d: Double, s: Int): Double

    Permalink
  148. final def signum[A](a: A)(implicit ev: Signed[A]): Int

    Permalink
  149. final def signum(x: Float): Float

    Permalink
  150. final def signum(x: Double): Double

    Permalink

    signum

  151. final def sin[A](a: A)(implicit ev: Trig[A]): A

    Permalink
  152. final def sinh[A](x: A)(implicit ev: Trig[A]): A

    Permalink
  153. final def sqrt[A](a: A)(implicit ev: NRoot[A]): A

    Permalink
  154. final def sqrt(x: Double): Double

    Permalink

    sqrt

  155. final def tan[A](a: A)(implicit ev: Trig[A]): A

    Permalink
  156. final def tanh[A](x: A)(implicit ev: Trig[A]): A

    Permalink
  157. final def toDegrees(a: Double): Double

    Permalink
  158. final def toRadians(a: Double): Double

    Permalink
  159. final def ulp(x: Float): Double

    Permalink
  160. final def ulp(x: Double): Double

    Permalink

Inherited from AnyRef

Inherited from Any

Ungrouped