dmkozyrev's blog

By dmkozyrev, history, 6 years ago, In Russian

Здравствуйте! Есть задача на acmp и решение в вещественных числах с использованием типа double.

Дан радиус окружности и даны прямые, заданные двумя точками, точки могут лежать как внутри круга, так и на окружности, требуется проверить для каждой пары прямых, лежит ли точка пересечения внутри круга, на нем или снаружи. Во входных данных все числа вещественные и могут быть заданы с 6-тью знаками после запятой, их абсолютные величины не превосходят 100, то есть, нужно 8 разрядов для точного представления.

В ходе решения при пересечении прямых возникают числа, в которых 16 разрядов, а также происходит их деление, в связи с этим есть ощущение, что точности типа double не хватает. Судя по всему, контр-тест должен содержать ровно две прямые, которые пересекаются очень близко к окружности, или пересекаются прямо на окружности. Я попробовал построить пересечение в точке (99.999999, 0.014142) с радиусом 100, тогда разность радиус-вектора точки и радиуса окружности будет порядка 3.835·10 - 9, с чем благополучно справляется тип double.

  • Vote: I like it
  • +5
  • Vote: I do not like it