# generateme/fastmath Release 1.5.0-alpha2

Fast and primitive math library

# fastmath

Fast and primitive based math library.

## Installation

`[generateme/fastmath "1.5.0-alpha1"]`

HERE

## Content

### PrimitiveMath

Code adopted from Zach Tellmans' library.

``````[* + - / > < >= <= == rem quot mod bit-or bit-and bit-xor bit-not bit-shift-left bit-shift-right unsigned-bit-shift-right inc dec zero? neg? pos? min max even? odd? bool-and bool-or bool-xor bool-not << >> >>> not==]
``````

### Math functions

• Trigonometric functions
• Power: log, ln, logb, exp, pow, sqrt
• Rounding functions: round, floor, ceil, trunc, frac, approx + other
• Normalizations: norm wrap, constrain
• Interpolations: lerp, cos-interpolation, smooth-interpolation, quad-interpolation, smoothstep
• Special functions: erf, beta, gamma + other
• Distance: dist, hypot
• Sign: sgn, signum, abs
• Other: gcd

Most of them backed by Jafama FastMath 2.3.1 or Apache Commons Math 3.6.1

### Vector operations protocol and implementations

• 2d (`Vec2`), 3d (`Vec3`) and 4d (`Vec4`) vector types.
• ArrayVector for fixed length long vectors (fixed sized double-array)
• Clojure vector, double array, Number (as 1d vector)

With following groups of functions:

• Basic linear operations: add, mult, div, sub, dot, cross, hadamard product
• mag, magsq, heading, angle-between, limit, normalize
• rotations (2d,3d)
• translations (2d, 3d)
• various distances
• centroid, interpolations
• and other

### Complex number functions

• primitive operations: mult, div, add, sub
• abs, arg, conjugate, reciprocal, neg
• atan, asin, acos, csc, sec, tanh, tan, sinh, sin, cosh, cos
• log, exp, pow
• sqrt, sq, sqrt1z

### Random numbers

• Collection of random number generators
• Collection of distributions
• Random generator functions for each primitive type (drand - double, lrand - long, frand - float, irand - int)
• Additional RNG functions: brand - true/false, grand - gaussian distributed double
• Random sequences: from distribution, halton, sobol, R2, sphere, uniform

### Noise

• 4 noise types: value, gradient, simplex, discrete
• 3 noise blends: fbm, ridgedmulti, billow
• Ready to use fbm functions: noise (perlin), vnoise (value noise), simplex

### Statistics

• Descriptive statistics: size, min, max, mode, mean, median, percentiles, kurtosis, skewness, IQR, LAV, UAV and other
• Correlations
• t-test
• ACF/PACF
• histogram
• Bootstrap
• Confidence intervals

### Interpolations

1d, 2d interpolations

### Easings

Several easing functions (in, out, in-out)

### Transforms

• Wavelets: 1d, 2d (haar, biorthogonal, symlet, coiflet, daubechies, legendre)
• 1d Fast Sine, Cosine and Hadamard

### Vector fields

Great collection (100+) of R^2->R^2 functions.

### Clustering

SMILE bindings for clustering

### Classifcations

SMILE, LIBLINEAR classification bindings

### Regression

• SMILE regression bindings
• extended Gaussian Processes

### Grids

Hexagonal, squared, triangular, rhomboidal grid functions

### Kernels

Collection of various kernels (density, RBF, correlation)

### Signal

Signal (audio) processing filters and oscillators

### Other

Plenty of constant values

Almost all functions optimized to work on `double` and `long` primitives

## Alternatives

Since this library is only JVM version, you can check following Clojure/ClojureScript libraries as replacement

• PrimitiveMath - for primitive operators
• Kixi stats - for pure clj(s) statistics/distributions (tends to be 2-10x slower)
• thi.ng - for vectors, general math, noise, complex numbers, transforms (fourier)
• vectorz-clj - fast vector operations
• Incanter - statistics/distributions/probability

## Java

Java classes are compiled for java 1.8

## How To Help

If you see place of improvement, I'm accepting PRs.

The Unlicence