Postponing sqrt computations
This section will show you how to use a proxy object in order to postpone, or even avoid, using the computationally heavy std::sqrt()
function when comparing the length of two-dimensional vectors.
A simple two-dimensional vector class
Let's start with a simple two-dimensional vector class. It has x and y coordinates and a member function called length()
that calculates the distance from the origin to the location (x, y). We will call the class Vec2D
. Here follows the definition:
class Vec2D {
public:
Vec2D(float x, float y) : x_{x}, y_{y} {}
auto length() const {
auto squared = x_*x_ + y_*y_;
return std::sqrt(squared);
}
private:
float x_{};
float y_{};
};
Here is an example of how clients can use Vec2D
:
auto a = Vec2D{3, 4};
auto b = Vec2D{4, 4};
auto shortest = a.length() < b.length() ? a : b;
auto length = shortest.length();
std::cout << length; // Prints 5
The example creates two vectors and...