PHP код:
static gMonthNames[][9] = {
"Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь"
};
stock GetMonthName(month, name[], const size = sizeof(name))
{
if (month < 1 || month > sizeof(gMonthNames) + 1) {
return 0;
}
name[0] = '\0';
strcat(name, gMonthNames[month - 1], size);
return 1;
}
stock GetCurrentMonthName(name[], const size = sizeof(name))
{
new month;
getdate(_, month, _);
name[0] = '\0';
strcat(name, gMonthNames[month - 1], size);
}
stock ReturnMonthName(month)
{
if (month < 0 || month > sizeof(gMonthNames)) {
return 0;
}
return gMonthNames[month - 1];
}
stock ReturnCurrentMonthName()
{
new month;
getdate(_, month, _);
return gMonthNames[month - 1];
}
Последний раз редактировалось ziggi; 17.01.2016 в 15:45.
PHP код:
stock GetMonthName(number, name[], size = sizeof(name))
{
static const month_names[12][] =
{
!"January", !"February", !"March", !"April", !"May", !"June",
!"July", !"August", !"September", !"October", !"November", !"December"
};
if (1 <= number <= sizeof(month_names))
return strunpack(name, month_names[number - 1], size);
return 0;
}
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Без упаковки будет быстрее, имхо.
P.S. Человек с lightcode проводил тесты условий, вот какие он результаты получил (я лично не проверял):
PHP код:
3285 - a < b < c
2478 a < b && b < c
4947 IS_IN_RANGE
PHP код:
#define IS_IN_RANGE(%0,%1,%2) (((%0) - ((%1) + cellmin)) < (((%2) + 1) - ((%1) + cellmin)))
Close.
Не люблю заниматься некропостингом, но многие факты в предыдущем посте показались мне не совсем понятными.
http://pro-pawn.ru/showthread.php?12585
Код:Тестирование: 3 отрывка кода. Режим: интерпретируемый, 1000000x100 итераций. strcat: 14111 strunpack: 12558 memcpy: 13253Как видно, при интерпретации быстрее strunpack, а с JIT - memcpy.Код:Тестирование: 3 отрывка кода. Режим: с JIT-компиляцией, 1000000x100 итераций. strcat: 9460 strunpack: 11608 memcpy: 7433
Мало того, можно заставить memcpy работать c JIT ещё быстрее, сделав вместо вызова нативной функции подстановку процессорных инструкций - функция сравнительно простая для этого.
Но я всё же выбрал strunpack, как компромисс между скоростью выполнения и компактностью данных. Алгоритм не такой уж и сложный (всего-то вызов одной функции), чтобы производительность была в приоритете.
ИМХО, вопрос спорный, т.к. результат может зависеть от вероятности вхождения/не вхождения числа в заданный диапазон и от использования JIT.
Одним тестом тут вряд ли обойдёшься (кстати, тебе показывали код теста?), следует оптимизировать код, исходя из ситуации. Причём, нужно хорошо знать, в какие инструкции AMX превратится код на Pawn, чтобы быть уверенным в эффективности оптимизации.
Например, можно сделать проверку даже так:
PHP код:
stock IsInRange(x, a, b)
{
if (a <= x)
if (x <= b)
return 1;
return 0;
}
Код:Тестирование 3 отрывка кода. Режим: интерпретируемый, 1000000x1000 итераций. if (RANGE_BEGIN <= j <= RANGE_END): 59765 if (RANGE_BEGIN <= j && j <= RANGE_END): 70405 if (RANGE_BEGIN <= j) if (j <= RANGE_END): 51045Как видно, предложенный способ с разбиением на два if быстрее как с JIT, так и без.Код:Тестирование 3 отрывка кода. Режим: с JIT-компиляцией, 10000000x1000 итераций. if (RANGE_BEGIN <= j <= RANGE_END): 74329 if (RANGE_BEGIN <= j && j <= RANGE_END): 67290 if (RANGE_BEGIN <= j) if (j <= RANGE_END): 65299
Правда, такое разбиение ветвлений на два может не подойти для случаев, когда в одном исходном if есть ветвь else, но выполняться такой код будет немного быстрее.
И, как я говорил ранее, в разных ситуациях код может быть разным. В данном тесте вероятность вхождения числа в диапазон 50%, но в реальных ситуациях эта вероятность может зависеть от всего, даже от расположения звёзд, поэтому сей тест нельзя считать однозначным ответом на вопрос о методах проверки на вхождение на диапазон, равно как и другие аналогичные тесты.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
$continue$ (27.02.2016) L0ndl3m (18.01.2016) VVWVV (18.01.2016) ziggi (18.01.2016)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)