Числа считаются равными, если они отличаются не более чем на (10^-12)

Рейтинг: 0Ответов: 2Опубликовано: 08.12.2014

На плоскости заданы три точки А, В и С. Определить, какая из двух последних точек (B или C) расположена ближе к A, и вывести расстояние от этой точки до точки A. Если точки В и С равноудалены от точки А, то вывести также расстояние между этими точками.

Формат входных данных

Единственная строка, содержащая шесть действительных чисел, разделенных пробелами, каждое из которых не превышает по модулю 104 - координаты точек А, В, С, соответственно.

Формат результата

Вывести одну или две строки. Первая строка содержит единственное число - расстояние от точки А до ближайшей из двух точек (В или С). Если точки В и С равноудалены от точки А, то вывести вторую строку, содержащую расстояние между точками В и С. Числа считаются равными, если они отличаются не более чем на 10^-12. Относительная или абсолютная погрешность выводимых значений не должна превышать 10^-6.

Программа корректно выполняет задачу, но на 102 тесте (онлайн) выдает ошибку! Я предполагаю, что проблема в условии погрешности равенства чисел! (Числа считаются равными, если они отличаются не более чем на 10^-12.)

Как ввести условие погрешности, чтобы программа проверяла, если числа отличаются на 10^-12 и далее, то сделать их абсолютно одинаковыми, допустим, до 10^-11 степени?

Ответы

▲ 3Принят

Вычитайте и сравнивайте с погрешностью:

double eps = 0.0000000001;
...
if (fabs(a - b) < eps)
    // ...

double fabs(double) — взятие модуля от числа, живет в <cmath> (она же <math.h>)

▲ 2

Контролируйте относительную ошибку к большему по модулю числу:

if(abs(a - b) < eps * max(abs(a),abs(b)) {
  // ...
}