This repository has been archived by the owner on Aug 2, 2024. It is now read-only.
Releases: jeremyong/klein
Releases · jeremyong/klein
v2.2.1
v2.2
v2.1
This version adds a number of QoL improvements as well as improvements to precision for a nominal cycle cost:
- The
kln::sqrt
free function is available and accepts as its argumentkln::rotor
,kln::branch
,kln::translator
, andkln::motor
. The function returns the quantityx
such thatx*x
is equal to the argument to within a good approximation. - Motors can now be multiplied by rotors and translators to produce new motors containing the composite action. This was an oversight from the existing API.
- Line normalization was fixed so that
l * ~l
properly produces unity. - Additional helper routines have been added to compute
rcp
,sqrt
, andrsqrt
to ~22 bits of accuracy.
v2.0
New semantic release due to breaking compatibility.
- Entity type has been removed due to compiler inability to properly
constant-fold interior expressions. - Operators have been promoted to first-order types.
- A number of operators have been specialized for various types for
improved throughput/latency. - Perf analysis has been updated.
- Motors can now be constructed from a screw axis, angle, and
displacement. - A preliminary dual number type as been added.
- The exp/log methods have been promoted to free functions and now have
strongly typed return values. - The project function has been added to simplify various projections.
Some operations that were previously permitted are no longer supported due to a fully general underlying "multivector" class (formerly known as entity<PMask>
). Operation overloads are now added individually. This enables another class of optimizations because type safety ensures that certain components of SSE registers are exactly 0.
Summarizing:
- Compile times reduced due to very minimal usage of templates and constexpr branches
- Speed improvements in most situations
- Increased type safety in a number of situations
v1.1
v1.0
v0.4
v0.3
This release addresses a few API gaps, most notably:
- Rotor application on lines (bivectors)
- Motor application on lines (bivectors)
- Translator application on lines (bivectors)
- Rotor and motor applications on directions
Motor conjugation of a direction is implemented in terms of a rotor conjugation due to the translational invariance of the direction application.