Skip to content

Latest commit

 

History

History
73 lines (60 loc) · 2.23 KB

README.md

File metadata and controls

73 lines (60 loc) · 2.23 KB

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.