uses ::hypot(x, y) instead of sqrt(x*x, y*y)