После прохождения нескольких статей здесь и при поиске есть много хороших решений для сравнения чисел с плавающей запятой.Использование Boost Floating Point Сравнение для получения возвращаемого значения bool
Такие, как библиотека Boost,: http://www.boost.org/doc/libs/1_34_0/libs/test/doc/components/test_tools/floating_point_comparison.html
У меня есть библиотека подталкивания доступна для меня и поэтому я хочу, чтобы использовать его. Однако у меня возникли проблемы с получением простого примера, чтобы показать мне, как получить возвращаемое значение boolean при сравнении двух чисел с плавающей запятой.
Например, они показывают примеры, как так: http://www.boost.org/doc/libs/1_50_0/libs/test/doc/html/utf/testing-tools/reference.html
Но это не возвращает логическое значение.
псевдопользователей пример кода:
double a = 1.0;
double b = 0.5+0.5;
double percentage = 0.00001; //0.001 %
//Now I want to use the boost library to do something like this:
bool isClose = check_is_close(a, b, percentage);
Я просто возникли проблемы с поиском, как получить логическое значение обратно.
Я работал в основном на Java, Python и Matlab в течение нескольких лет, поэтому C++ для меня сейчас как иностранный.
Пожалуйста, помогите!
(редактирование: Извините за формат, двойное пространство не вставить разрыв строки) Спасибо, я так близко; Я не подбирал тип персетов и пытался передать его как двойник. Во втором примере, я нашел лучшее уравнение в моих поисках: BOOL isEqualDouble (двойной а, б) дважды { статических двойного DBL_EPSILON = STD :: numeric_limits :: эпсилон(); return fabs (a - b) <= 16 * DBL_EPSILON * fmax (fabs (a), fabs (b)); } –
user3325798
@ user3325798 Повторите второй пример - это будет правильно, но в значительной степени, только если вам нужна эта значительная точность сравнения (она находится вокруг | a, b | * 2e-1000). Вот почему я использовал в своем ответе как 1е-6, так и 1е-5, чтобы показать, что вам нужно определить точность между возможными точками, которые подходят вашему делу. – mockinterface
Примечание: это больше не работает с Boost 1.59. Мне пришлось использовать 'boost :: math :: fpc :: percent_tolerance'. – BenC