1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #include "ceres/is_close.h"
- #include <algorithm>
- #include <cmath>
- namespace ceres::internal {
- bool IsClose(double x,
- double y,
- double relative_precision,
- double* relative_error,
- double* absolute_error) {
- double local_absolute_error;
- double local_relative_error;
- if (!absolute_error) {
- absolute_error = &local_absolute_error;
- }
- if (!relative_error) {
- relative_error = &local_relative_error;
- }
- *absolute_error = std::fabs(x - y);
- *relative_error = *absolute_error / std::max(std::fabs(x), std::fabs(y));
- if (x == 0 || y == 0) {
-
-
- *relative_error = *absolute_error;
- }
- return *relative_error < std::fabs(relative_precision);
- }
- }
|