You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The BLAS/LAPACK paths cast logical/integer operands to double via
maybe_cast_double(), which passes complex through untouched -- so
complex operands flowed into the real d* routines, which read complex
storage as reals: complex(2) %*% complex(2) returned a real dot product
of the real parts where R returns the complex result. A silent wrong
answer, found in external review.
All linalg operand casts now go through cast_linalg_double(), which
refuses complex with a compile-time message naming the divergence
(linear algebra in quickr is double-only). Covers %*% (including t()
forms), crossprod/tcrossprod, solve/qr.solve, forwardsolve/backsolve,
chol, chol2inv, svd, and outer. The mode-preserving standalone t() and
elementwise complex arithmetic are untouched.
0 commit comments