Я работаю над различными функциями манипуляции с блоком памяти, и во время тестов я заметил, что моя реализация IsEqualRange(double* begin1, double* end1, double* begin2, double* end2)
намного быстрее, чем std::equals(...)
на MSVC и GCC, а также. Дальнейшее исследование показало, что double и float не блокируются по сравнению с memcmp
, а в цикле for один за другим.
В какой ситуации бинарное сравнение чисел приводит к неверному результату? Когда это нормально для двоичного сравнения (равенства) массив чисел с плавающей запятой/удваивается? Есть ли другие фундаментальные типы, где я не должен использовать memcmp
?