From 4ab32e2de2511746e2108563a43cbbeb1922fbf2 Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Sat, 11 Jul 2020 12:50:46 +0200 Subject: Allow implicit conversion from bfloat16 to float and double Conversion from `bfloat16` to `float` and `double` is lossless. It seems natural to allow the conversion to be implicit, as the C++ language also support implicit conversion from a smaller to a larger floating point type. Intel's OneDLL bfloat16 implementation also has an implicit `operator float()`: https://github.com/oneapi-src/oneDNN/blob/v1.5/src/common/bfloat16.hpp --- Eigen/src/Core/arch/Default/BFloat16.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Eigen') diff --git a/Eigen/src/Core/arch/Default/BFloat16.h b/Eigen/src/Core/arch/Default/BFloat16.h index 561304f80..abf2ac933 100644 --- a/Eigen/src/Core/arch/Default/BFloat16.h +++ b/Eigen/src/Core/arch/Default/BFloat16.h @@ -117,10 +117,10 @@ struct bfloat16 : public bfloat16_impl::bfloat16_base { EIGEN_DEVICE_FUNC EIGEN_EXPLICIT_CAST(unsigned long long) const { return static_cast(bfloat16_to_float(*this)); } - EIGEN_DEVICE_FUNC EIGEN_EXPLICIT_CAST(float) const { + EIGEN_DEVICE_FUNC operator float() const { return bfloat16_impl::bfloat16_to_float(*this); } - EIGEN_DEVICE_FUNC EIGEN_EXPLICIT_CAST(double) const { + EIGEN_DEVICE_FUNC operator double() const { return static_cast(bfloat16_impl::bfloat16_to_float(*this)); } template -- cgit v1.2.3