mlr - single-header-only C++26 linear algebra math library
mlr implements aligned array arr : std::array<T,N> based vector vec::type<T,N,A> type for N-dimensional linear algebra math using OpenGL/KHR providing a base compatibility type interface for Quake C++ vec_t based types.
cmake . --install-prefix=/usr
make install
Change CMakeLists.txt
compile flags to fit your needs:
add_compile_options(-march=native -mfpmath=[your SIMD instruction set] -O3)
#include <mlr/vector.hpp>
using namespace math;
int main(int argc, char** argv)
{
vec::f32<3> A = { vec::f32<3>::identity(0),
vec::f32<3>::identity(1),
vec::f32<3>::identity(2) };
A[2] = vec::f32<3>::cross3(A[0],A[1]);
A[2].print_header(3, "cross3");
A[2].print(3);
exit(EXIT_SUCCESS);
}
|vector | typ|alg|vec|alg|mode |cnt
|+1.00e+00 +0.00e+00 +0.00e+00 +0.00e+00| 4| 4| 16| 16|adaptive/vector|4
|+0.00e+00 +1.00e+00 +0.00e+00 +0.00e+00| 4| 4| 16| 16|adaptive/vector|4
|cross3 | typ|alg|vec|alg|mode |cnt
|+0.00e+00 +0.00e+00 +1.00e+00 +0.00e+00| 4| 4| 16| 16|adaptive/vector|4
|cross4 | typ|alg|vec|alg|mode |cnt
|-0.00e+00 +0.00e+00 -0.00e+00 +1.00e+00| 4| 4| 16| 16|adaptive/vector|4
|cross2 GL_CCW/GL_CW | typ|alg|vec|alg|mode |cnt
|-0.00e+00 +1.00e+00 +0.00e+00 -1.00e+00| 4| 4| 16| 16|adaptive/vector|4
|dot4 | typ|alg|vec|alg|mode |cnt
|+0.00e+00 +0.00e+00 +0.00e+00 +0.00e+00| 4| 4| 16| 16|adaptive/vector|4
|sum | typ|alg|vec|alg|mode |cnt
|+1.00e+00 +1.00e+00 +1.00e+00 +1.00e+00| 4| 4| 16| 16|adaptive/vector|4
|vector | typ|alg|vec|alg|mode |cnt
|+1.00e+00 +0.00e+00 +0.00e+00| 4| 4| 12| 4|adaptive/scalar|3
|+0.00e+00 +1.00e+00 +0.00e+00| 4| 4| 12| 4| scalar|3
|+0.00e+00 +0.00e+00 +1.00e+00| 4| 4| 16| 16| vector|3
|un/aligned add | typ|alg|vec|alg|mode |cnt
|+0.00e+00 +1.00e+00 +1.00e+00| 4| 4| 12| 4|adaptive/scalar|3
|+1.00e+00 +0.00e+00 +1.00e+00| 4| 4| 12| 4| scalar|3
|+1.00e+00 +1.00e+00 +0.00e+00| 4| 4| 16| 16| vector|3