Определите большее число и разделите - PullRequest
4 голосов
/ 02 декабря 2011

Хорошо, я не знаю, как это кратко изложить.

Это мой код:

var ratio, input={w:100,h:50};
if(input.w <= input.h) ratio = input.h / input.w;
else                   ratio = input.w / input.h;

Вопрос: Существует ли более быстрый, лучший, "менее необходимый код" способ расчета ratio? Чем операторы if / else.

Спасибо!

Ответы [ 5 ]

10 голосов
/ 02 декабря 2011

Вы можете использовать троичный условный оператор. Синтаксис:

condition ? (statement if true) : (statement if false);

В вашем случае:

ratio = (input.w <= input.h) ? (input.h/input.w) : (input.w/input.h);

EDIT:

Это не быстрее, чем ваше решение, просто быстрее писать. Я бы посоветовал не использовать:

* * 1010

Это сравнит числа дважды (один раз в Math.Max, один раз в Math.Min) и будет медленнее.

7 голосов
/ 02 декабря 2011
var ratio = Math.max(input.w, input.h) / Math.min(input.w, input.h)

другой [возможно, более эффективный]:

var ratio = Math.max(input.w / input.h, 1 / input.w / input.h);

даже эффективнее троичного:

var ratio = w / h ;
ratio = ratio > 1 && ratio || 1/ratio
2 голосов
/ 02 декабря 2011

Как насчет

ratio = Math.max(input.w, input.h) / Math.min(input.w, input.h)
2 голосов
/ 02 декабря 2011

Меньше не обязательно быстрее:

var ratio, input = {w:100, h:50};
ratio = input.w <= input.h ? input.h / input.w : input.w / input.h;
1 голос
/ 02 декабря 2011

Вы можете использовать троичный оператор:

var ratio = (input.w <= input.h ? (input.h / input.w) : (input.w / input.h));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...