diff --git a/Eigen/src/Core/arch/Default/BFloat16.h b/Eigen/src/Core/arch/Default/BFloat16.h index 110a07d46..f2e55f345 100644 --- a/Eigen/src/Core/arch/Default/BFloat16.h +++ b/Eigen/src/Core/arch/Default/BFloat16.h @@ -675,7 +675,7 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 fmax(const bfloat16& a, const bfl EIGEN_DEVICE_FUNC inline bfloat16 fma(const bfloat16& a, const bfloat16& b, const bfloat16& c) { // Emulate FMA via float. - return bfloat16(static_cast(a) * static_cast(b) + static_cast(c)); + return bfloat16(numext::fma(static_cast(a), static_cast(b), static_cast(c))); } #ifndef EIGEN_NO_IO diff --git a/Eigen/src/Core/arch/Default/Half.h b/Eigen/src/Core/arch/Default/Half.h index af0d17266..ba70d5fab 100644 --- a/Eigen/src/Core/arch/Default/Half.h +++ b/Eigen/src/Core/arch/Default/Half.h @@ -812,7 +812,7 @@ EIGEN_DEVICE_FUNC inline half fma(const half& a, const half& b, const half& c) { return half(_mm_cvtsh_h(_mm_fmadd_ph(_mm_set_sh(a.x), _mm_set_sh(b.x), _mm_set_sh(c.x)))); #else // Emulate FMA via float. - return half(static_cast(a) * static_cast(b) + static_cast(c)); + return half(numext::fma(static_cast(a), static_cast(b), static_cast(c))); #endif }