[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);
   }