PDA

Просмотр полной версии : [Вопрос] Есть ли смысл в такой оптимизации?



x86
08.08.2019, 01:51
Что думаете по поводу такой оптимизации?


stock IsVehicleMoving(vehicleid)
{
static Float:x, Float:y, Float:z;
return (GetVehicleVelocity(vehicleid, x, y, z) != 0) &&
((_:x != 0) || (_:y != 0) || (_:z != 0));
}

stock IsVehicleBackwordsDirection(vehicleid)
{
static Float:x, Float:y, Float:z, Float:z_angle;
if (GetVehicleVelocity(vehicleid, x, y, z)) {
if (_:z_angle < 0x42b40000) {
if (_:x > 0 && _:y < 0)
return 1;
} else if (_:z_angle < 0x43340000) {
if (_:x > 0 && _:y > 0)
return 1;
} else if (_:z_angle < 0x43870000) {
if (_:x < 0 && _:y > 0)
return 1;
} else {
if (_:x < 0 && _:y < 0)
return 1;
}
}
return 0;
}


P.S. оптимизация была сделана для таймера. И да, я знаю, что это снижает читаемость кода.

Outsider
08.08.2019, 03:12
По поводу читаемости кода: тебе ничто не мешает юзать дефайны.

DeimoS
08.08.2019, 11:49
А в чём, собственно, оптимизация? Показал бы хотя бы вариант до оптимизации, чтоб было с чем сравнить.

x86
08.08.2019, 15:40
А в чём, собственно, оптимизация? Показал бы хотя бы вариант до оптимизации, чтоб было с чем сравнить.

Из кода были убраны все floatcmp вызовы.

Nexius_Tailer
08.08.2019, 17:44
Из кода были убраны все floatcmp вызовы.
На самом деле в экономии это мизер, а вот что касается такого вырвиглазного кода взамен:


if (_:z_angle < 0x42b40000) {

то скорее даже больше вреда от этого будет, чем пользы.

Daniel_Cortez
08.08.2019, 18:15
Не говоря уже о том, что такая "оптимизация" сама по себе неправильная.
(-2.0 < -1.0) ==> true
(_:-2.0 < _:-1.0) ==> false

Пытаться оптимизировать сравнение с нулём - тоже не совсем правильно, т.к. помимо 0.00 (0x00000000) есть ещё и -0.00 (0x80000000), и по правилам вещественной арифметики эти два числа ВНЕЗАПНО равны.
(0.0 == -0.0) ==> true
(_:0.0 == _:-0.0) ==> false
Т.е., к примеру, если переменная x равна -0.0, то проверка _:x > 0 выдаст неправильный результат.

DeimoS
08.08.2019, 19:19
Из кода были убраны все floatcmp вызовы.

Если обе функции должны вызываться одним и тем же таймером, то ты, скорее, больше будешь тратить от двух вызовов GetVehicleVelocity, чем от всех floatcmp вместе взятых.

x86
08.08.2019, 23:23
Тему можно закрывать, так как это был бред (хотя что еще можно было ожидать от двух часов ночи). Вообще стоило сделать тесты и бенчмарки.