Как преобразовать диапазон чисел от 0-200 до 1-5 - PullRequest
4 голосов
/ 25 января 2011

У меня есть значение от 0 до 200, где 0 - лучшее качество, а 200 - худшее.

Как я могу преобразовать (в рамках obj-c / cocoa) в целое число от 0-5, являющееся 5 лучшим ?.

Например, 200 будет 0 и 0 будет 5.

Ответы [ 5 ]

9 голосов
/ 25 января 2011

В общем случае, если вам нужно преобразовать Q = [A, B] в Q' = [A', B'], где f(A) = B' и f(B) = A', тогда произвольный X в пространстве [A, B] будет иметь для [A', B'] следующее значение:

X' = X * k + d;

где

k = (B' - A') / (A - B);

d = A' - B * k;

Итак, для вашего случая мы имеем A = 200, B = 0 и A' = 5, B' = 1, в результате:

k = -1/50

d = 5

произвольное значение x из [0, 200] пробела будет переведено следующим образом:

x' = x * (-1 / 50) + 5;
3 голосов
/ 25 января 2011

Надеюсь, округление работает здесь:

int input;
int output = 5 - (int)floorf( ((float)input)/40.0f);

Вы можете получить те же результаты, просто набрав

int output = 5 - (input/40);

но это зависит от математических настроек вашего компилятора.

1 голос
/ 25 января 2011

Я думаю, что должно работать, где [0-200] - ваш показатель качества. 5 - ([0-200] / 40)

1 голос
/ 25 января 2011

Пусть х в 0..200.Выполните (200 - x) / 40, если хотите получить результат от 0 до 5, или (200 - x) / 50 + 1, если хотите получить результат от 1 до 5.

0 голосов
/ 25 января 2011

Предложение Александра С. о (200 - x) / 50 + 1 математически верно, если результат следует интерпретировать как точку выборки в интервале [1,5].С этой формулой вывод 5 возможен только с точным вводом 0 (взятым из [0,200]).

Однако я ожидаю, что оригинальный плакат предполагает, что каждое целое число в [1,5] будетпредставитель подинтервала [0,200].Например, что 5 соответствует подинтервалу [0,39], а 4 - [40, 79] и т. Д. Если это и есть намерение, решение Александра С. является математически правильным решением для немного другой задачи, и в этом случаеПодход Стивена Фурлани предпочтителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...