Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение пропорциональных значений. Как облегчить вычисление? 
:(
    Опции темы
Ghirik
Дата 2.6.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Есть набор числовых значений, известно, что от самого большого значения нужно получить десять процентов, а от остальных, пропорциональное значению количество процентов.
Пытался описать математически правильно, но где там...  smile  проще показать, вот:

Код

var proc = .1;
var t=30,T=100,l=50,L=150,h=40,H=500,w=200,W=800;
var p = [T-t,L-l,H-h,W-w];
var max = Math.max.apply('', p);
var i = p.length;
while (i--) { p[i] = Math.round(proc/(max/p[i])*10000)/10000 };
alert(p);


Т.е. я здесь получаю правильный результат. Но мне кажется такой способ вычисления тяжеловат. Эта штука должна выполняться в цикле несколько десятков раз. Потому хотелось бы облегчить вычисление, как говорится, упростить выражение. По слову пропорция, я не смог найти ни чего связанного с JavaScript, наверное таких методов не существует... Есть у кого предложения?


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Grig
Дата 2.6.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 809
Регистрация: 29.4.2005
Где: Иркутск

Репутация: 2
Всего: 16



Всё об одном.
Можно, конечно, написать процедуру или прототип массива, но содержать они будут тот же функционал.


--------------------
        
PM MAIL ICQ   Вверх
IDVsbruck
Дата 2.6.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Разве что чуть-чуть подправить количество вычислений: не каждый раз в цикле вычислять 10%, а вычислить его до цикла.
Надо не забывать, что javascript - это интерпретируемый язык программирования и поэтому чем длиннее и сложнее строка, тем больше уйдет времени на парсинг и, соответственно, вычисление строки.
Еще "моментик": зачем вычислять длину массива, а затем декрементировать счетчик, если можно сраз поставить цикл "for (var i in p) {}"?
PM MAIL   Вверх
Ghirik
Дата 2.6.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Точно, получилось вынести половину.
Код

var proc = .1;
var t=30,T=100,l=50,L=150,h=40,H=500,w=200,W=800;
var p = [T-t,L-l,H-h,W-w];
var max = Math.max.apply('', p);
var proc = proc * 10000 * max;
var i = p.length;
while (i--) { p[i] = Math.round(proc/p[i])/10000 };
alert(p);


А по поводу for-in - это медленная штуковина.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Ghirik
Дата 2.6.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



НИФИГА! smile 

Заработать то заработало, а значения после округления получаются другие... Ладно, оставлю, как есть.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
SelenIT
Дата 3.6.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(Ghirik @  2.6.2008,  16:17 Найти цитируемый пост)
proc/p

Где ж пропорциональность, если на пропорциональную величину [I]делят? Очевидно же, что для пропорциональности нужно все величины умножать на общий коэф-т...  smile 


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Ghirik
Дата 4.6.2008, 05:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Цитата

Где ж пропорциональность


Ага... Математик я ещё тот... 
Вчера пришел к выводу, что MS Excel полиномы не так считает smile пока не нашел у себя глюк...

Вообще, не получается что либо вынести из цикла, потому, как p[i] всегда разное(в том числе, бывает равно max), и присутствие proc нужно прямо в цикле. Но заменить умножением можно, оно всё же легче.

Код

var proc = .01;
var t=30,T=100,l=50,L=150,h=40,H=500,w=200,W=800;
var p = [T-t,L-l,H-h,W-w];
var max = Math.max.apply('', p);
var i = p.length;
while (i--) { p[i] = Math.round(p[i]/max*proc*10000)/10000 };
alert(p);

Т.е., записи вида proc/(max/p[i]) и p[i]/max*proc идентичны.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.