cobr123 / XioScript

XioScriptCodeLibrary
2 stars 4 forks source link

почти всегда на 0,01 завышает макс квал рабов по ТОП1 #13

Closed ra81 closed 7 years ago

ra81 commented 7 years ago

когда ставлю зарплату Максимум, то почти всегда он ставит зарплату рабам на 0,01 пункт по квале больше чем положено. ТОП1 перегружается почти всегда если руками не править. Как то с этим можно справиться? Может округлять где то до 3-4 знака а не до 2 при расчетах.

vulh commented 7 years ago

ага, иногда даже на целый процент. Опцию страшно использовать при полной загрузке топ-3. Хотя это мб скрипт неточно считает, я хз

ra81 commented 7 years ago

слегка подумал - такая ботва может быть если считать через float. Довольно косячный тип одинарной точности. Резалты будут весьма кривые особенно если учесть что там вложенные формулы. Не разбираюсь шибко в js особенностях.

Но обратил внимание что порой если потыкать раза 3-4 fire ставит в итоге верную цифру. Странно конечно.

ra81 commented 7 years ago

Еще раз подумал, пока тыкал. Я же сравниваю с установленным у себя скриптом, о котором ранее в тикетах упоминал. С ним расходится на 0,01 в квале. А поскольку вообще неясно кто считает правильно он или этот скрипт - тут стоит призадуматься.

vulh commented 7 years ago

Кстати target вроде точно считает, у меня проблема проверить, так как мало квал без бонусов.

ra81 commented 7 years ago

kvala_personal_indicator_zarplaty_by_Agor71 всегда считает верно. Если мне выставит XioScript на 0,01 больше квалу. То kvala_personal_indicator_zarplaty_by_Agor71 всегда показывает что перебор. Дальше если я смотрю эффективность подразделения будущую, то там тоже показывает перебор на 0,01%. В итоге эффективность дает 99,9% Есть смысл забрать расчет зарплат из kvala_personal_indicator_zarplaty_by_Agor71 скрипта. Текущая формула xioscript считает с косячком

cobr123 commented 7 years ago

в 12.0.72 добавил -0,01 для настройки "Maximum"

ra81 commented 7 years ago

есть более хорошее решение. Нужно просто не давать округлять а делать вот так

` function calcSalary(sn, sc, kn, kc, kr){ // s = salary, k = skill, n = now, c = city, r = required kr = Math.floor(kr100)/100; // <<<<========= ВСТАВИТЬ в скрипт var calc = sn > sc? kn - kc Math.log( 1 + sn / sc ) / Math.log(2) : Math.pow( sc / sn , 2) kn - kc; return kr > ( calc + kc )? sc (Math.pow(2, ( kr - calc ) / kc ) - 1) : sc * Math.sqrt( kr / ( kc + calc ) ); }

`Вставил себе потыкал туда сюда все идеально сходится. Никаких переборов нет.

cobr123 commented 7 years ago

убрал -0,01 для настройки "Maximum", добавил округление в calcSalary. в 12.0.73

ra81 commented 7 years ago

выглядит воркабл. гладко. очень редко занижает. но это норм.