![]() |
Напрмер.
Реализация чередования значений a и b, хранящийхся в перменной x x=( a + b ) - x Перед первой обработкой в x должно хранится одно из значений (a или b ) Код:
a=6 |
Реализация прохода переменной x всех значений из [0;b-1]
x = ( x + 1 ) Mod b Код:
b=5 |
Выбор максимума из a,b в одну ф-лу
x = ( Abs( a-b ) + ( a+b ) ) *.5 Код:
a=4 |
хм
ето ты сам придумал ? или где взял ? |
>Выбор максимума из a,b в одну ф-лу
>x = ( Abs( a-b ) + ( a+b ) ) *.5 If a>b x=a else x=b endif - это будет гораздо быстрее, чем куча умножений/сложений(раз в 5-6 примерно), вот тест(если не верите): Код:
a=5 |
прикол у меня первый способ быстрее :)
у pentiumов alu рулит полюбе - вот за что их люблю , и неглючат никогда |
Не отрицаю - все выше изложенные формулы работают медленее, конструкций условного перехода, однако, в борьбе за скорость приходится отказваться от удобочитаемости ( избавляться от функциий, юзать goto и т.п.) - так что выбор за вами. Я лишь посчитал эти формулы интересными.
Практически все где-то видел : в институте, интернете, чужом коде. |
Ф-лу минимума можно получить или эвристически или объединив ф-лы для max и чередования 2ух значений.
x = ( ( a+b ) - Abs( a-b ) ) *.5 Код:
a=10 |
Как определить, является ли число степенью двойки?
Код:
bool PowOfTwo (int num) |
БЫСТРЫЙЙЙЙ !!! :)) квадратный корень с минимальной точностью
Код:
float fast_sqrt(float f) |
2jimon :
продолжая борьбу за скорость: добавь ещё inline для функции |
Да, хорошая функция, но огорчает, что выдает неточный результат с простыми корнями. Например, fast_sqrt(625)==25.76, а fast_sqrt(144)==12.5.
|
ето не я делал... щитается дефак-то самая быстрая функция примерного извлечение квадратного корня
|
Цитата:
|
ну всеже она может хоть чучуть сказать какой корень :)
|
Цитата:
|
Может я ещё не опоздал ?
alcoSHoLiK Цитата:
Цитата:
(а вернее для не степени двойки оснований ) : Цитата:
про узнавании степени не додумал ,пока. PS ещё про корни : где-то в древности корень примерно извлекали так Код:
sqr(a)=sqr(b^2+c)~b+(c/2b) |
to Kain
в формулу корня особо не вникал, но она не пригодится, т.к. в правой части всё равно есть корень... время не выиграем... так што можно считать как обычно ( что не на много быстрее) алгоритмы - это конечно хорошо, но тут вроде как "Любопытные формулы" и к тому же alcoSHoLiK уже написал формулу "проверка числа на степень 2": Код:
bool PowOfTwo (int num) |
Формула не для пользования была приведена, а для справки
так считали 4000 лет назад.... учебник Алгебры 8 класса 1)у alcoSHoLiK 'а стоит знак вопроса 2)ето не для блица (тупо посмотрел справку,нету там :lol: а так как я не профи, как понял так и ответил а вообще когда есть двусмысленность пишите как impersonalis: ответ (читать ... ... .. ) |
Re: Любопытные формулы
Нужно было догнать любое число до первого большего с основанием 2 в N-степени, пример: если число 31, то резалт должен быть 32, если 257, то 512 и т.д.
Сначала написал, чтоб посмотреть будет ли ваще програ раобтать простым циклом: while(true) { static int iIter = 1; if( iLabelWidth > iIter ) iIter = iIter << 1; else { iLabelWidth = iIter; break; } } потом начал придумывать как моно сделать запись короче, придумал: // fIn - вход. число // получаем степень float stepen = log10((float)fIn)/ log10(2.0f); int res = pow(2, ((floor(stepen)+1))); Результат при сравнении на быстродействие: на 10 млн. итераций выполняется за 9284 мск, против первого(обычным циклом) за 50 мск. Так что оставил первый. Может кто-то лучше напишет, вставлю себе. |
Re: Любопытные формулы
Код:
((char*)&w)[sizeof(w)-1]&=~(1<<7); |
Re: Любопытные формулы
Цитата:
jimon-у спасибо за быстрыыыыый корень. 2Imeprsionalis - inline не получится вставить. там код на asm-e. |
Re: Любопытные формулы
Константные выражения компилятор считать умеет. Если не доверяешь ему, смотри сгенерированные асм-листинги.
|
Ответ: Любопытные формулы
<<jimon>> (23:32:19 4/10/2008)
http://www.graphics.stanford.edu/~seander/bithacks.html канопляное поле - единство битовой вселенной ! |
Ответ: Любопытные формулы
Формула для возведения числа в любую степень и извлечения любого корня:
exp(b*ln(a)), где a - число, которое возводим в степень, b - степень в которую возводим, exp - экспонента, ln - натуральный логарифм. |
Ответ: Любопытные формулы
формула возвращает 0 если (параметр<0) или параметр, если (параметр=>0)
result= ( parameter+Abs(parameter) )/2понадобилось при прохождении массива по элементам, во избежание минусовых индексов. не самый быстрый и правильный вариант решения задачи, но может кому пригодится.:) |
Ответ: Любопытные формулы
result = parameter*(parameter>0) , не?
|
Ответ: Любопытные формулы
если учитовать строго условие то по задумке
result = parameter*(parameter>=0) :) |
Ответ: Любопытные формулы
Цитата:
Цитата:
Думаю - стоит перместить тред в Математику (там она будет более к месту, не смущая брейнфачными решениями). |
Ответ: Re: Любопытные формулы
Цитата:
Код:
x -= 1; |
Ответ: Любопытные формулы
>> 30
Матан-нази негодует! |
Ответ: Любопытные формулы
Поиск корня из числа "а" любой степени точности:
прикидываем примерный корень - "b" (Где-то выше по форуму есть такой алгоритм) с:=a/b b:=(c+b)*0.5 Повторяем две предыдущие операции до достижения желаемой точности (2-4 раза достаточно) P.S. По-моему, это называется формулой Ньютона |
Часовой пояс GMT +4, время: 01:16. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot