Git Product home page Git Product logo

fastmath's Introduction

fastmath

Fast and primitive based math library.

Originally it was a part of generative art/glich Clojure2d library.

Installation

[generateme/fastmath "0.1.1"]

Documentation

HERE

Content

Code adopted from Zach Tellmeans' 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

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 (count: 28)
  • 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, 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

Interpolations

1d, 2d interpolations

Transforms

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

Other

Plenty of constant values

Almost all functions optimized to work on double and long primitives

Supporting libraries

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

TODO

  • Change images to plots with axes
  • More tests
  • Move vector fields and signal processing from Clojure2d/extra

How To Help

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

Licence

The Unlicence

fastmath's People

Contributors

tsulej avatar

Watchers

Josef Pospíšil avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.