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