TL;DR: Here you can see a handmade comparison function for floating point values.
While working on a C++ project using templates, I had to perform an equality to see if two values are identical. While the == is OK for integer values, it is not really OK for floating point values. At that point, you have several options:
- Write inline code depending on instantiation (type conditions)
- Write a macro (I'm not fond of macros really)
- Write a (global) function
I'm sure there are others...
Solution
I've chose to write a comparison function myself, just to do a bit of exercise. The header is:
//
// Created by Laur Ivan on 15/12/15.
//
#ifndef CHECKS_H
#define CHECKS_H
#define DEFAULT_TOLERANCE 0.00001 // a small enough tolerance
bool check(double v1, double v2, double tolerance);
bool check(double v1, double v2);
#endif //CHECKS_H
and the source:
//
// Created by Laur Ivan on 15/12/15.
//
#include <math.h>
#include "checks.h"
/**
* Check if the two values are cloe enough
*/
bool check(double v1, double v2, double tolerance) {
double delta = fabs(v1 - v2);
return delta < tolerance;
}
bool check(double v1, double v2) {
return check(v1, v2, DEFAULT_TOLERANCE);
}
This is not rocket science, just a simple comparison function, with a shortcut for the default tolerance. These days you can add variable arguments to C++ functions, but I've elected not to do that :)
HTH,
Member discussion: