Уменьшения числа
Привет всем! Хочу узнать, какой самый быстрый и наиболее оптимизированный способ свести случайное значение на 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 извините, я в математике не очень.. поэтому могу ошибаться |
Ответ: Уменьшения числа
сорри.. опоздал со своим примером )
|
Часовой пояс GMT +4, время: 10:53. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot