this algebra was constructed with ``check=False`` and passed
an invalid multiplication table.
"""
+
+ # Used to check whether or not something is zero in an inexact
+ # ring. This number is sufficient to allow the construction of
+ # QuaternionHermitianEJA(2, RDF) with check=True.
+ epsilon = 1e-16
+
for i in range(self.dimension()):
for j in range(self.dimension()):
for k in range(self.dimension()):
x = self.monomial(i)
y = self.monomial(j)
z = self.monomial(k)
- if (x*y).inner_product(z) != x.inner_product(y*z):
- return False
+ diff = (x*y).inner_product(z) - x.inner_product(y*z)
+
+ if self.base_ring().is_exact():
+ if diff != 0:
+ return False
+ else:
+ if diff.abs() > epsilon:
+ return False
return True