Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
not under active development - primitive math for clojure
Clojure
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
autodoc use satisfies? not instance?
src
test/cantor/test add 4-vectors, and use deftype instead of defrecord
.gitignore
README.textile Make clear that this project isn't really meant to be used anymore.
project.clj

README.textile

This library is not under active development. It was written to support Penumbra, which has also not been touched in a few years. Given the changes to Clojure’s primitive math in the intervening years, it’s probably not that useful anymore.

Cantor is a high-performance floating point math library.

The idiomatic way to add together two 2-vectors in Clojure is

> (map + [1 2] [3 4])
(4 6)

Sadly, this is quite slow. Cantor defines operators which work efficiently across a variety of types. The above operation, in Cantor, is accomplished thus:

> (add (vec2 1 2) (vec2 3 4))
[ x=4.0 y=6.0 ]

This is roughly 10-20x faster than the idiomatic approach. These operators also work on normal numbers:

> (add 1 2)
3

The available operators include:

  • add
  • sub
  • mul
    • (mul (vec2 1 2) 2) => [ x=2.0 y=4.0 ]
    • (mul (vec3 1 2 3) (vec3 4 5 6)) => [ x=4.0 y=7.0 z=9.0 ]
  • div
    • (div (vec3 2 4 6) 2) => [ x=1.0 y=2.0 z=3.0 ]
    • (div (vec2 4 8) (vec2 1 2)) => [ x=4.0 y=4.0 ]
  • dot
    • (dot (vec2 1 0) (vec2 0 1)) => 0.0
  • polar
    • (polar (vec2 1 1)) => [ theta=45 r=1.414 ]
  • map*
    • (map* #(+ % 1) (vec3 1 2 3)) => [ x=2.0 y=3.0 z=4.0 ]
  • cartesian
    • (cartesian (polar2 45 1)) => [ x=0.707 y=0.707 ]
    • (cartesian 45) => [ x=0.707 y=0.707 ]

Complete documentation can be found here.

Something went wrong with that request. Please try again.