[BUGFIX] Fix floor divide (#21096)
* Fixed floor_divide bug on float16
* Made separate version for half_t with division made on float
* Update Contributors.md
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index c214571..716f146 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -301,6 +301,7 @@
* [Zhenghui Jin](https://github.com/barry-jin)
* [Dominika Jedynak](https://github.com/DominikaJedynak)
* [Adam Grabowski](https://github.com/agrabows)
+* [Kacper Pietkun](https://github.com/Kacper-Pietkun)
Label Bot
---------
diff --git a/src/operator/mshadow_op.h b/src/operator/mshadow_op.h
index 991cae7..f048618 100644
--- a/src/operator/mshadow_op.h
+++ b/src/operator/mshadow_op.h
@@ -248,10 +248,17 @@
return static_cast<bool>(::floor(a / b));
}
- template <
- typename DType,
- typename std::enable_if<!std::is_integral<DType>::value && !std::is_same<DType, float>::value,
- int>::type = 0>
+ MSHADOW_XINLINE static mshadow::half::half_t Map(mshadow::half::half_t a,
+ mshadow::half::half_t b) {
+ return static_cast<mshadow::half::half_t>(
+ ::floor(static_cast<float>(a) / static_cast<float>(b)));
+ }
+
+ template <typename DType,
+ typename std::enable_if<!std::is_integral<DType>::value &&
+ !std::is_same<DType, float>::value &&
+ !std::is_same<DType, mshadow::half::half_t>::value,
+ int>::type = 0>
MSHADOW_XINLINE static DType Map(DType a, DType b) {
return ::floor(a / b);
}