Я получаю этот фрагмент кода от где-то еще. Согласно веб-мастеру, код выбирается из The art of computer programming by KnuthРазница между приблизительноEqual и по существуEqual в искусстве программирования компьютера
Поскольку у меня нет копии этой книги, могу ли я узнать, в чем разница между двумя функциями?
bool approximatelyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ((fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
bool essentiallyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ((fabs(a) > fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
Могу ли я сказать, что по существуEqual всегда будет иметь значение 'ближе', чем приблизительно? –
Да, значения 'essenceEqual' всегда будут« ближе », чем значения' приблизительноEqual'. – palswim
Подумайте о предложениях в своем обычном магазине и о том, что там означает процент. Какова более ценная 33% -ная скидка в цене или 33% дополнительного бесплатного продукта? Решение состоит в том, что вы должны отдать предпочтение 33% скидке, так как это эквивалентно 50% бесплатному предложению продукта. То же самое происходит здесь, в зависимости от того, возьмете ли вы эпсилон вокруг большего или меньшего из двух значений, результат будет отличаться. 66,6 примерно равна 100 с 33% эпсилон, но только по существу равна 50% эпсилон. –