До сих пор я видел много сообщений, касающихся равенства чисел с плавающей запятой. Стандартный ответ на вопрос типа "как мы должны решить, если x и y равны?" это
abs(x - y) < epsilon
где epsilon - фиксированная малая константа. Это связано с тем, что "операнды" x и y часто являются результатом некоторых вычислений, в которых участвует ошибка округления, поэтому стандартный оператор равенства == - это не то, что мы имеем в виду, и то, что мы действительно должны задавать, - это то, являются ли x и y близкими, не равно.
Теперь я чувствую, что если x "почти равно" y, то также x * 10 ^ 20 должно быть "почти равным" y * 10 ^ 20 в том смысле, что относительная ошибка должна быть одинаковой ( но "относительный" к чему?). Но с этими большими числами вышеуказанное испытание потерпит неудачу, то есть это решение не "масштабируется".
Как вы справитесь с этой проблемой? Должны ли мы перемасштабировать цифры или перемасштабировать эпсилон? Как? (Или моя интуиция не так?)
Вот вопрос , но мне не нравится его принятый ответ, поскольку вещь reinterpret_cast кажется мне немного сложной, я не понимаю, что продолжается. Попробуйте выполнить простой тест.