![]() |
Уменьшения числа
Привет всем! Хочу узнать, какой самый быстрый и наиболее оптимизированный способ свести случайное значение на 0...
оно может быть как положительным, так и отрицательным к примеру я бы сделал что-то вроде этого: a# = Rnd (-10,10); задаем случайное значение s# = .1; шаг уменьшения ;в цикл If a>0 Then If a>s Then a = a - s Else a = 0 EndIf Else If a<0 If a<(-s) Then a = a + s Else a = 0 EndIf EndIf насколько это оптимальный вариант, когда производительность критична? еще был самый простой вариант - делить... это вообще одна строчка.. но мне как-то советовали избегать вычеслений с длинными числами с плавающей точкой. Помогите, пожалуйста :) |
Ответ: Уменьшения числа
Измеряй сколько времени требуется для твоего способа и для других(в том числе и з плавающей точкой), результаты потом сравниш.
Это хорошая практика оптимизации для всех вычеслений. |
Ответ: Уменьшения числа
Цитата:
Если что, ещё советовали: Цитата:
Добавлено: тогда наоборот If a>0 Then лишне :4to: |
Ответ: Уменьшения числа
думаю, что без If a>s число станет меньшим чем ноль (например, если S будет не ровным) и уже начнет обрабатываться условием If a<0... т.е. будет постоянно смещаться то више нуля, то ниже
|
Ответ: Уменьшения числа
Посмотрел новый блитз-хелп (а какой он сейчас версии?)
что-то новенькое Sgn (number) Цитата:
Цитата:
|
Ответ: Уменьшения числа
А вот так ?
Код:
Local a:Int = Rand(-100, 100) Abs(x) - возвращает модуль числа. Sgn(x) - возвращает знак числа. Я оперирую с челыми числами, так как для процессора это гораздо быстрее... Уже опередили! ))) |
Ответ: Уменьшения числа
Или так :
Код:
Local a:Float = Rand(-100.0, 100.0) |
Ответ: Уменьшения числа
умножение на дробное число никогда не приведёт к резельтату 0 (если конечно одно из чисел уже не является нулем) самый простой -
Код:
function Test(start#,step#) |
Ответ: Уменьшения числа
Цитата:
|
Ответ: Уменьшения числа
юзай lerp
http://en.wikipedia.org/wiki/Lerp_(computing) a+c*(b-a) где c = процент (0 до 1) перехода из a в b ---- Цитата:
твоя куча if сожрёт больше времени чем пара операций с дробными числами а вообще это экономия на спчиках |
Ответ: Уменьшения числа
ТРЕБУЮ БЕНЧМАРК! 4 if против линейной интерполяции
|
Ответ: Уменьшения числа
мне это нужно было для гашения полученного импульса..
допустим, если полученный импульс i# = 1, делитель d# = 2 то это будет i = i/d... но у меня ещё есть одна переменная - TimeScale#, которая обычно равна 1 (отвечает за замедление времени) как внедрить её в i = i/d, чтобы если она меньше единицы (например, t# = .5) гашение импульса через деление происходило медленнее? |
Ответ: Уменьшения числа
умнложить делитель на время
только нужно немного переделать если ты хочешь чтобы по такому принципу работал - i=i/(1+d#*t#) |
Ответ: Уменьшения числа
разве тогда, исходя из предложенного примера это не будет вот так?
i = i/(d*t) 1 = 1/(2*.5) = 1 извините, я в математике не очень.. поэтому могу ошибаться |
Ответ: Уменьшения числа
сорри.. опоздал со своим примером )
|
Ответ: Уменьшения числа
вобщем, вчера я запнулся именно на этом.. не получилось внедрить t# вот и сейчас выходит не то.. получается результат, который был бы таким и без времени 1 = 1 / (1+2*.5) = .5
|
Ответ: Уменьшения числа
[quote=Dream;189393]умножение на дробное число никогда не приведёт к резельтату 0 (если конечно одно из чисел уже не является нулем) самый простой -
[quote] Можно легко замагнитить число к нулю. |
Ответ: Уменьшения числа
а как это?
|
Ответ: Уменьшения числа
Цитата:
Local s:Float = -0.1 a = Min((Abs(a) * s) - 0.1, 0.0) * Sgn(a) Если а меньше 0.1 то а приравнится к нулю. Насчет функции Sgn(number) она какая то сверхсложная ? Код:
Function Sgn:Int(num:Float) Код:
Function Min:Float(v0:Float, v1:Float) |
Ответ: Уменьшения числа
Цитата:
|
Ответ: Уменьшения числа
d - это делитель.. было бы странно, если бы деление на 1 уменьшало в два раза?
|
Ответ: Уменьшения числа
Цитата:
И вообще что это за делитель? зачем он применяется? |
Ответ: Уменьшения числа
если i - это импульс, то делитель (d) это то, что его гасит...
т.е. мне нужно иметь контроль для настройки скорости гашения полученного импульса и + к тому - чтобы был контроль времени этого процесса.. т.е. если время = .5, то гашение будет идти так же, но в два раза медленнее |
Ответ: Уменьшения числа
используй число от 0 до 1 и сразу вопросы отпадут
i=i*(d*t) |
Ответ: Уменьшения числа
извините, но первый пост - лютый БРЕД.
Автор может быть и подразумевает весьма конкретную задачу, но написал какую-то размазню. Ответ: самый быстрый способ свети число к нулю - обнулить. x=rnd(0,10) x=0 Поражает наличие в треде телепатов (они вернулись из отпуска!), которые сумели восполнить пробелы, или, что более вероятно, решают свои задачи. *импе телепатирует* АВТОР, тебе надо читать вот это: http://ru.wikipedia.org/wiki/%D2%E5%...EB%E5%ED%E8%FF (в частности - http://ru.wikipedia.org/wiki/Следяща...ема_управления ) |
Ответ: Уменьшения числа
Цитата:
|
Ответ: Уменьшения числа
Это "типа" поможет ему смоделировать систему гашения ошибки на выходе. По сути, он моделирует некую следящую систему, реагирующую на случайный входной сигнал.
Конкретные реализации давать не имеет смысла - автор не может объяснить что хочет. Каков вопрос (по уровню абстракции) таков ответ. |
Ответ: Уменьшения числа
Цитата:
PHP код:
Может просто иметь скорость... |
Ответ: Уменьшения числа
2 impersonalis: я бы не стал разводить такой базар, если мне надо было бы просто прировнять её к нулю. Наверное я тебя своей тупостью раздражаю :) мне не надо гасить ошибку на выходе... это просто частица, которая получила определенную скорость по вектору, которую надо быстро(в зависимости от переменной) погасить. и все это привязано ко времени... чтобы если оно вдруг замедлилось, скорость уменьшалась в соответствующем темпе... я решил эту проблему ещё вчера своим ламерским способом, представленным в начале, но надеюсь научиться чему-то более... изящному, что-ли, общаясь тут с более сообразительными ребятами
|
Ответ: Уменьшения числа
Цитата:
Например: сервомеханизм реагирует на давление в котле. Как только оно начинает превышать установленный порог (например, 0 Па) - система компенсирует образовавшуюся разность (актуальное и требуемое значение), например, путём стравливания излишков газа. Вот вы и спрашиваете - каким законом должна быть описана эта реакция: открыть заслонку сразу на максимум, открывать на величину, пропорциональную давлению, проч? |
Часовой пояс GMT +4, время: 19:15. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot