Expand description
Compile-time determinants and dimension dispatch.
det_direct() is a const fn providing closed-form determinants for D=0–4,
using fused multiply-add where applicable. It returns Ok(Some(det)) for those
dimensions and Ok(None) for D ≥ 5. Matrix::<0>::zero().det_direct() returns
Ok(Some(1.0)) (the empty-product convention). For D=1–4, direct formulas
bypass LU factorization entirely. This enables compile-time evaluation when
inputs are known:
use la_stack::prelude::*;
// Evaluated entirely at compile time — no runtime cost.
const DET: Result<Option<f64>, LaError> = match Matrix::<4>::try_from_rows([
[2.0, 0.0, 0.0, 0.0],
[0.0, 3.0, 0.0, 0.0],
[0.0, 0.0, 5.0, 0.0],
[0.0, 0.0, 0.0, 7.0],
]) {
Ok(matrix) => matrix.det_direct(),
Err(err) => Err(err),
};
fn main() -> Result<(), LaError> {
assert_eq!(DET?, Some(210.0));
Ok(())
}The public det() method automatically dispatches through the closed-form path
for D ≤ 4 and falls back to zero-tolerance LU for D ≥ 5. Tiny nonzero
determinants are not flattened by a configured pivot tolerance. The LU fallback
returns LaError::Singular when floating-point elimination cannot produce a
non-zero pivot; it does not misreport that numerical failure as an exact zero.
Use lu() directly when you need a different tolerance policy, and use the
exact determinant APIs when exact singularity classification matters.