AMX MOD X
Среда, 28.01.2026, 07:26:31



Приветствую Вас Гость | RSS
[ Главная ] [ как округлить число ? - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: slogic, AlMod  
как округлить число ?
KokaДата: Пятница, 12.09.2008, 20:15:54 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
сабж.

1)
есть
new a = 4
как ее превратить в 0 ?

2)
есть
new a = 24
как ее превратить в 20 ?

3)
есть
new a = 504
как ее превратить в 500 ?

4)
есть
new a = 2224
как ее превратить в 2220 ?

5)
есть
new a = 77774
как ее превратить в 77770 ?

вообщем все что до 5 - надо в 0, а все что после 5 (включая 5) - надо в 10

blush


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Пятница, 12.09.2008, 20:24:46
 
dArkДата: Пятница, 12.09.2008, 21:40:16 | Сообщение # 2
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Репутация: 1
Статус: Не в сети
Мне так кажется, что a = a / 10 * 10. Токо a должно быть типа инт, тогда деление на 10 будет отрубать последнее число, а умножение добавлять обратно 0
 
se7hДата: Суббота, 13.09.2008, 12:07:17 | Сообщение # 3
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
new a, Float:b

a = 2224   // округляемое число

b = a/10.0    // преобразуешь его в дробное и делишь на 10.0

a = floatround(b)*10    // округляешь дробное число до целого и умножаешь его на 10, возвращая в нужный порядок

вот что получается в итоге после оптимизации:

Code
new a = 2224

a = floatround(a/10.0)*10

всё




Сообщение отредактировал se7h - Суббота, 13.09.2008, 12:11:27
 
VENДата: Суббота, 13.09.2008, 12:12:58 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Code
if (a - (a = a / 10 * 10) >= 5) a += 10

Способ, представленный в предыдущем посте, не рекомендуется, т.к. осуществляет целых два вызова float-native функций AMX Mod X ядра, хотя работает аналогично представленному в данном посте методу.

 
se7hДата: Суббота, 13.09.2008, 12:27:17 | Сообщение # 5
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (VEN)
Codeif (a - (a = a / 10 * 10) >= 5) a += 10 Способ, представленный в предыдущем посте, не рекомендуется, т.к. осуществляет целых два вызова float-native функций AMX Mod X ядра, хотя работает аналогично представленному в данном посте методу.

в таком случае лучше было бы вообще так

if (a - (a = a / 10 * 10) > 4) a += 10


 
DaTaДата: Суббота, 13.09.2008, 15:23:02 | Сообщение # 6
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (se7h)
в таком случае лучше было бы вообще так

чем лучше? без разницы
 
se7hДата: Суббота, 13.09.2008, 15:43:39 | Сообщение # 7
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
между >= и > существует разница, с точки зрения оптимизации второй случай более приемлим

 
DaTaДата: Суббота, 13.09.2008, 16:15:42 | Сообщение # 8
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (se7h)
между >= и > существует разница, с точки зрения оптимизации второй случай более приемлим

команды условного перехода выполняются одинаковое кол-во времени
jsless jump_0000 ;JA(>)

jsleq jump_0001 ;JAE(>=)

http://helper10.narod.ru/v18.htm

 
se7hДата: Суббота, 13.09.2008, 16:26:31 | Сообщение # 9
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Недаром же ты супер-модер :D

 
VENДата: Суббота, 13.09.2008, 20:54:57 | Сообщение # 10
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Поправка - три вызова native функций, т.к. (a/10.0) выполняется как floatdiv(float(a), 10.0), после чего выполняется округление посредством floatround(). Не лишним будет отметить, что float*() функции являются относительно ресурсоемкими.
 
se7hДата: Суббота, 13.09.2008, 23:40:41 | Сообщение # 11
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (VEN)
Поправка - три вызова native функций, т.к. (a/10.0) выполняется как floatdiv(float(a), 10.0), после чего выполняется округление посредством floatround(). Не лишним будет отметить, что float*() функции являются относительно ресурсоемкими.

для чего тогда создавались эти функции? чтобы их неиспользовать?
если бы речь шла о процессоре Z-80 с частотой 3.54 MHz я бы ещё понял


 
DaTaДата: Суббота, 13.09.2008, 23:58:32 | Сообщение # 12
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (se7h)
если бы речь шла о процессоре Z-80 с частотой 3.54 MHz я бы ещё понял

а сам? lol
Quote (se7h)
между >= и > существует разница, с точки зрения оптимизации второй случай более приемлим

даже если бы занимало в два раза больше времени, хуже стало бы? нет? "если бы речь шла о процессоре Z-80 с частотой 3.54 MHz я бы ещё понял"...

а вызов native функций сравнительно дорогой, скажем "нет" быдлокодерству :)

 
se7hДата: Воскресенье, 14.09.2008, 10:32:19 | Сообщение # 13
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (DaTa)
а сам?

считаю некорректным первоночальное замечание VEN'a, вопрос был не "как максимально быстро с точки зрения проессорного времени округлить число ?", а просто "как округлить число ?"

Quote (DaTa)
а вызов native функций сравнительно дорогой, скажем "нет" быдлокодерству

то есть ты хочешь сказать что кодеры использующие float да и вообще native-функции, написанные специально для удобства и упрощаемости чтения кода, быдло-кодеры???
навязывать свой стиль - дурной тон, поосторожнее на поворотах ;)




Сообщение отредактировал se7h - Воскресенье, 14.09.2008, 10:33:48
 
KokaДата: Воскресенье, 14.09.2008, 10:43:15 | Сообщение # 14
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
Quote (VEN)
if (a - (a = a / 10 * 10) >= 5) a += 10

спасибо работает :)

(зы: вы еще подеритесь :')))


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
 
se7hДата: Воскресенье, 14.09.2008, 10:46:39 | Сообщение # 15
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (Koka)
(зы: вы еще подеритесь :')))

была задета честь быдло-кодеров :D


 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2026