Написал программу вычисляющую площадь четырёхугольника, в том числе вычисляющую площадь "вогнутого" четырёхугольника, где одна из вершин находится внутри треугольника образованного тремя другими вершинами. Например если есть четырёхугольник ABCD и точка A лежит внутри треугольника BCD, то это можно установить проверив условие:

BCD-площадь треугольника BCD и т.д.
Но при вводе координат (таких что одна из точек в "недрах" треугольника) с точностью более 4-5 значащих цифр программа находит, что условие не выполняется, большой треугольник чуть-чуть не равен трём маленьких из которых он состоит и из-за этого отличия включается алгоритм вычисления площади выпуклого четырёхугольника и ошибка может быть очень значительной. Программа написана на C++, тип используемых переменных long double. Как избежать этого "чуть-чуть"?
Собственная попытка решения проблемы: усложнить проверку условия так, чтобы проверялась относительная погрешность, если

меньше скажем 0,000001 то считать четырёхугольник "вогнутым", но тогда программа может принять выпуклый четырёхугольник очень близкий по внешнему виду к треугольнику за "вогнутый" и посчитать площадь немного не правильно