Fix another complex div edge case.

libeigen/eigen!2257
This commit is contained in:
Antonio Sánchez
2026-03-06 21:37:26 +00:00
committed by Rasmus Munk Larsen
parent 5bacb5be9a
commit 20fce70e5a
2 changed files with 22 additions and 5 deletions

View File

@@ -1624,6 +1624,22 @@ void packetmath_complex() {
const RealScalar inf = std::numeric_limits<RealScalar>::infinity();
const RealScalar nan = std::numeric_limits<RealScalar>::quiet_NaN();
// Test division by a denominator with equal real and imaginary magnitudes
// to ensure pdiv scaling avoids division by zero (e.g. 1.0 - 1.0i).
if (PacketTraits::HasDiv) {
for (int i = 0; i < PacketSize; ++i) {
data1[i] = Scalar(one, zero);
RealScalar sign_re = (i & 1) ? -one : one;
RealScalar sign_im = (i & 2) ? -one : one;
data2[i] = Scalar(sign_re, sign_im);
}
internal::pstore(pval, internal::pdiv(internal::pload<Packet>(data1), internal::pload<Packet>(data2)));
for (int i = 0; i < PacketSize; ++i) {
Scalar expected = data1[i] / data2[i];
VERIFY_IS_APPROX(pval[i], expected);
}
}
// Multiplication and Division.
{
std::array<RealScalar, 8> special_values = {zero, one, inf, nan, -zero, -one, -inf, -nan};