Я кодирование до реализации Interpolation Search в С.Задание плавающего значения или использование функций math.h *?
вопрос на самом деле довольно просто, мне нужно использовать плавающие операции сделать линейную интерполяцию, чтобы найти правильный индекс, который в конечном счете будет целое результат.
В частности, индекс моего зонда:
t = i + floor((((k-low)/(high-low)) * (j-i)));
, где, I, J, K, T являются беззнаковыми Интсами, и высоким, низким, удваивается.
Будет ли это эквивалентно:
t = i + (unsigned int)(((k-low)/(high-low)) * (j-i));
Есть ли какие-либо причине я бы на самом деле хочу использовать math.h пола * функцию над только простым (интермедиат) напечатанным?
Понятно, спасибо за подробную информацию. Хорошая новость: ((k-low)/(high-low)) * (j-i) гарантированно будет> = 0, если алгоритм правильно закодирован (поскольку он является индексом в массив afterall). Так что это, по-видимому, подходящий вариант. Спасибо. – nobody
@nobody: Обратите внимание, что с точки зрения производительности литье в интегральный тип может быть не быстрее, чем при использовании 'floor'. Кастинг для интегрального типа, вероятно, требует записи в память (на x86, все это почти гарантировано), при вызове 'floor' может и не быть, так как его результат является значением с плавающей запятой. Ваш пробег может отличаться, но следите за преждевременной и/или ошибочной оптимизацией. –