diff --git a/Snap_rounding_2/include/CGAL/Snap_rounding_traits_2.h b/Snap_rounding_2/include/CGAL/Snap_rounding_traits_2.h index bd5e23f0bae..1c8b44c9f6d 100644 --- a/Snap_rounding_2/include/CGAL/Snap_rounding_traits_2.h +++ b/Snap_rounding_2/include/CGAL/Snap_rounding_traits_2.h @@ -67,10 +67,22 @@ public: NT x_tmp = p.x() / pixel_size; NT y_tmp = p.y() / pixel_size; - double x_floor = std::floor(CGAL::to_double(x_tmp)); - double y_floor = std::floor(CGAL::to_double(y_tmp)); - x = NT(x_floor) * pixel_size + pixel_size / NT(2.0); - y = NT(y_floor) * pixel_size + pixel_size / NT(2.0); + NT x_floor = std::floor(CGAL::to_double(x_tmp)); + NT y_floor = std::floor(CGAL::to_double(y_tmp)); + + //fix the double floor + while(x_floor>x_tmp) x_floor-=NT(1); + while(y_floor>y_tmp) y_floor-=NT(1); + while(x_floor+1<=x_tmp) x_floor+=NT(1); + while(y_floor+1<=y_tmp) y_floor+=NT(1); + + CGAL_assertion(x_floor<=x_tmp); + CGAL_assertion(y_floor<=y_tmp); + CGAL_assertion(x_floor+1>x_tmp); + CGAL_assertion(y_floor+1>y_tmp); + + x = x_floor * pixel_size + pixel_size / NT(2.0); + y = y_floor * pixel_size + pixel_size / NT(2.0); } };