diff --git a/paddle/phi/kernels/cpu/cast_impl.h b/paddle/phi/kernels/cpu/cast_impl.h index ea67a17b8a343..2fafdb7daf76c 100644 --- a/paddle/phi/kernels/cpu/cast_impl.h +++ b/paddle/phi/kernels/cpu/cast_impl.h @@ -22,7 +22,17 @@ namespace phi { template struct CastOpTransformFunctor { - HOSTDEVICE OutT operator()(InT in) const { return static_cast(in); } + HOSTDEVICE OutT operator()(InT in) const { + if constexpr (std::is_same::value) { + float val = static_cast(in); + if (val > 65504.0f && val <= 65519.0f) { + return static_cast(65504.0f); + } else if (val < -65504.0f && val >= -65519.0f) { + return static_cast(-65504.0f); + } + } + return static_cast(in); + } }; template