|
как округлить число ?
|
|
| Koka | Дата: Пятница, 12.09.2008, 20:15:54 | Сообщение # 1 |
 Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| сабж. 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 
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
Сообщение отредактировал Koka - Пятница, 12.09.2008, 20:24:46 |
| |
|
|
| dArk | Дата: Пятница, 12.09.2008, 21:40:16 | Сообщение # 2 |
|
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Статус: Не в сети
| Мне так кажется, что a = a / 10 * 10. Токо a должно быть типа инт, тогда деление на 10 будет отрубать последнее число, а умножение добавлять обратно 0
|
| |
|
|
| se7h | Дата: Суббота, 13.09.2008, 12:07:17 | Сообщение # 3 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| 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
Статус: Не в сети
| 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
Статус: Не в сети
| 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
Статус: Не в сети
| Quote (se7h) в таком случае лучше было бы вообще так чем лучше? без разницы
|
| |
|
|
| se7h | Дата: Суббота, 13.09.2008, 15:43:39 | Сообщение # 7 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| между >= и > существует разница, с точки зрения оптимизации второй случай более приемлим
|
| |
|
|
| DaTa | Дата: Суббота, 13.09.2008, 16:15:42 | Сообщение # 8 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| 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
Статус: Не в сети
| Недаром же ты супер-модер
|
| |
|
|
| VEN | Дата: Суббота, 13.09.2008, 20:54:57 | Сообщение # 10 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Поправка - три вызова native функций, т.к. (a/10.0) выполняется как floatdiv(float(a), 10.0), после чего выполняется округление посредством floatround(). Не лишним будет отметить, что float*() функции являются относительно ресурсоемкими.
|
| |
|
|
| se7h | Дата: Суббота, 13.09.2008, 23:40:41 | Сообщение # 11 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| 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
Статус: Не в сети
| Quote (se7h) если бы речь шла о процессоре Z-80 с частотой 3.54 MHz я бы ещё понял а сам? Quote (se7h) между >= и > существует разница, с точки зрения оптимизации второй случай более приемлим даже если бы занимало в два раза больше времени, хуже стало бы? нет? "если бы речь шла о процессоре Z-80 с частотой 3.54 MHz я бы ещё понял"... а вызов native функций сравнительно дорогой, скажем "нет" быдлокодерству 
|
| |
|
|
| se7h | Дата: Воскресенье, 14.09.2008, 10:32:19 | Сообщение # 13 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| считаю некорректным первоночальное замечание VEN'a, вопрос был не "как максимально быстро с точки зрения проессорного времени округлить число ?", а просто "как округлить число ?" Quote (DaTa) а вызов native функций сравнительно дорогой, скажем "нет" быдлокодерству то есть ты хочешь сказать что кодеры использующие float да и вообще native-функции, написанные специально для удобства и упрощаемости чтения кода, быдло-кодеры??? навязывать свой стиль - дурной тон, поосторожнее на поворотах 
Сообщение отредактировал se7h - Воскресенье, 14.09.2008, 10:33:48 |
| |
|
|
| Koka | Дата: Воскресенье, 14.09.2008, 10:43:15 | Сообщение # 14 |
 Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| Quote (VEN) if (a - (a = a / 10 * 10) >= 5) a += 10 спасибо работает (зы: вы еще подеритесь :')))
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
|
| |
|
|
| se7h | Дата: Воскресенье, 14.09.2008, 10:46:39 | Сообщение # 15 |
 Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| Quote (Koka) (зы: вы еще подеритесь :'))) была задета честь быдло-кодеров 
|
| |
|
|