Skip to content

Laremere/alg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Alg

alg.math does concise formulas for custom types. Similar to operator overloading in other languages.

I'm making this for a private project which needs to do various types of algebraic math. Unless Alg takes on a life of its own, things will mostly be implemented whent I need them. Also I'm new to Zig and things are likely to not be idiomatic. Issues, comments, and requests are welcome, but will only be acted upon as I see fit.

Example:

var a = alg.mat.Matrix(f32, 2, 1).lit(.{
    1,
    2,
});

var b = alg.mat.Matrix(f32, 1, 2).lit(.{
    3, 4,
});

var c: f32 = 5;

var result = alg.math("a * b * c", .{
    .a = a,
    .b = b,
    .c = c,
});

try expectEqual(alg.mat.Matrix(f32, 2, 2).lit(.{
    15, 20,
    30, 40,
}), result);

Current limitations:

  • Only a limited number of operations implemented so far.
  • There is no order of operations. All chained operations must be the same. Use parethesis to determine order. Eg, "(a * b) + c".
  • Chained operations are always carried out left to right. This may be inefficient for some equations, and not standard for others (eg, raising to a power).

All more complex types have a single underlying type, and all operations require the same underlying type between operands. Eg you can't add a matrix backed by floats with one backed by integers.

Implemented:

  • Matrices:
    • Define matrix in terms of rows, and columns.
    • Addition between matrices of the same size.
    • Multiplication with compatible shaped matricies resulting in a third, possibly differently shapped, matrix.
    • Multiplication with scaler values, which multiplies each value in the matrix by the scaler.
  • Imaginary Numbers:
    • Define in terms of real and imaginary parts.
    • Addition and Multiplication with other imaginary numbers.

Feature Wishlist:

  • Types:
    • Floats
    • Integers
    • Comptime float and integers
    • Vectory / Array
    • Matrix
    • Affine Matrix
    • Geometic Algebra
    • Maybe custom functions?
    • Imaginary Numbers
    • Quaternion
  • Operations
    • Add
    • multiply
    • dot
    • etc.
  • Built in values?
    • e
    • pi
    • Identity matrix? Is this useful?
  • Make parse errors actually useful.
  • Pairwise conversion of underlying type.

About

Algebra for Zig

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages