Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Как сравнить вещественные числа в Си на больше-меньше?

#c


Как в Си выяснить, какое из вещественных чисел больше?

Везде пишут, что нельзя использовать обычные операторы сравнения, но внятного объяснения,
как корректно это сделать, я так и не нашел. 
    


Ответы

Ответ 1



Трудности сравнения возникают, когда нужно проверить два числа на равенство - в этом случае, следует отталкиваться от конкретной задачи - математическая постановка задачи должна подсказать, достаточно ли сравнить модуль разности с заранее выбранной величиной, отвечающей за точность сравнения (абсолютной погрешностью). Подходит, например, если задача хорошо переведена в безразмерный вид, и все числа в ней принимают значения между -1 и 1. Или использовать более сложные способы сравнения - например, смешение абсолютной и относительной погрешностей if (Abs(x - y) <= Max(absTol, relTol * Max(Abs(x), Abs(y)))) То есть, вы можете, одним из способов сначала убедиться, что числа существенно различаются, а затем уже обычным : if(a>b) ... else ... решить вопрос, какое больше, какое - меньше.

Ответ 2



a < b-EPS a <= b+EPS fabs(a-b) <= EPS

Ответ 3



Как представляется float в памяти? Cогласно формату IEEE 754. В этом формате число представляется тремя полями. знак -1 бит , порядок - 8 бит, мантисса (23 бита) Соответсвенно все важна сама мантисса. Она то как раз будет преобразовыватся в двоичный формат и по ней будет идти сравнивание, все, что не кратно 2 будет иметь погрешность, соответсвенно сравнивать надо до какого-то определенного знака после запятой. Ребята я не работаю с С и С++ и С# но логично же, что вычислите модуль их разности и сравнивайте с требуемой точностью. Если модуль разности меньше точности - числа равны. Если надо сравнить больше меньше то после модуля разности еще раз проверьте если они не равны.

Комментариев нет:

Отправить комментарий