diff --git a/core/math/linalg/linalg.odin b/core/math/linalg/linalg.odin index 9a4781668..66a11b47a 100644 --- a/core/math/linalg/linalg.odin +++ b/core/math/linalg/linalg.odin @@ -1,6 +1,7 @@ package linalg import "core:math" +import "intrinsics" // Generic @@ -78,9 +79,11 @@ transpose :: proc(a: $T/[$N][$M]$E) -> (m: ((M == N) ? T : [M][N]E)) { return; } -mul_matrix :: proc(a: $A/[$I][$J]$E, b: $B/[J][$K]E) -> (c: ((I == J && J == K && A == B) ? A : [I][K]E)) { +mul_matrix :: proc(a: $A/[$I][$J]$E, b: $B/[J][$K]E) -> (c: ((I == J && J == K && A == B) ? A : [I][K]E)) + where !intrinsics.type_is_array(E), + intrinsics.type_is_numeric(E) { for i in 0.. (c: ((I == J && J == K & return; } -mul_matrix_vector :: proc(a: $A/[$I][$J]$E, b: $B/[I]E) -> (c: B) { +mul_matrix_vector :: proc(a: $A/[$I][$J]$E, b: $B/[I]E) -> (c: B) + where !intrinsics.type_is_array(E), + intrinsics.type_is_numeric(E) { for i in 0.. f64 { if i == 0 { for { - x = -math.log(float64(r)) * (1.0/ rn); - y := -math.log(float64(r)); + x = -math.ln(float64(r)) * (1.0/ rn); + y := -math.ln(float64(r)); if y+y >= x*x { break; }