PDA

Просмотр полной версии : [Native] floatcmp



Daniel_Cortez
30.05.2015, 17:25
Описание:

Сравнивает два вещественных числа.

Параметры:

Float:oper1 - число 1.
Float:oper2 - число 2.


Возвращаемое значение:

Возвращает 0, если числа равны; 1, если первый операнд больше второго, и -1, если второй операнд больше первого.

Примечания:
Возвращаемые функцией значения чем-то похожи на результат вычитания (oper1-oper2).
Если числа равны, результат вычитания - 0, отрицательный результат - функция вернёт -1, положительный - 1.
При обычном сравнении вещественных чисел (>, <, >=, <=) функция floatcmp используется косвенно, вызываясь из функции-"обёртки" на Pawn.
Для каждого оператора сравнения вещ. чисел есть своя функция-обёртка, по-своему обрабатывающая результат, возвращаемый floatcmp (см. файл float.inc).
Смысл использования floatcmp напрямую в том, что тогда получится миновать вызов функции-обёртки, благодаря чему вы можете получить прирост в производительности своего кода.
Особенно полезно, когда сравнение проводится в цикле (например, при обработке координат всех машин на сервере или при проверке здоровья/брони игроков).
Для проверки на равенство/неравенство (==, !=) также можно использовать оператор переопределения тега : и сравнивать оба числа, как целые, минуя вызов нативной функции:
if(_:oper1 == _:oper2)
Внимание! Данную оптимизацию можно использовать только при использовании операторов == и !=. Проверки >, <, >= и <= будут работать неправильно, если привести операнды к целочисленному тегу. Кроме того, выражение "_:0.0 == _:-0.0" выдаст 0, как будто 0.0 и -0.0 не равны, однако floatcmp считает эти числа равными (т.е. "floatcmp(0.0, -0.0)" вернёт 0).


Пример использования:

CMD:checkmyhealth(playerid, params[])
{
new Float:health;
GetPlayerHealth(playerid, health);
if(floatcmp(health, 100) >= 0) // если 0 или 1, здоровье равно или больше 100.0
return SendClientMessage(playerid, -1, "Ваше здоровье в норме.");
}


Статью подготовил: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)

Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!