make long to double explicit
diff --git a/include/delaunator.hpp b/include/delaunator.hpp
index 2497e5e..a505bdb 100644
--- a/include/delaunator.hpp
+++ b/include/delaunator.hpp
@@ -467,8 +467,10 @@
         const double dy = y - m_center_y;
         // use pseudo-angle: a measure that monotonically increases
         // with real angle, but doesn't require expensive trigonometry
-        const double p = 1 - dx / (std::abs(dx) + std::abs(dy));
-        return static_cast<std::size_t>(std::llround(std::floor((2 + (dy < 0 ? -p : p)) / 4 * m_hash_size)));
+        const double p = 1.0 - dx / (std::abs(dx) + std::abs(dy));
+        return static_cast<std::size_t>(std::llround(std::floor(
+            (2.0 + (dy < 0.0 ? -p : p)) / 4.0 * static_cast<double>(m_hash_size) //TODO:is this conversion save?
+        )));
     }
 
     void hash_edge(std::size_t e) {