|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
01.11.2005, 20:29
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Напрмер.
Реализация чередования значений a и b, хранящийхся в перменной x
x=( a + b ) - x
Перед первой обработкой в x должно хранится одно из значений (a или b )
a=6
b=9
x=b
For i=1 To 10
x=(a+b)-x
Print x
Next
WaitKey()
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
01.11.2005, 20:36
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Реализация прохода переменной x всех значений из [0;b-1]
x = ( x + 1 ) Mod b
b=5
x=0
For i=1 To 10
x=(x+1)Mod *b
Print x
Next
WaitKey()
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
01.11.2005, 20:46
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Выбор максимума из a,b в одну ф-лу
x = ( Abs( a-b ) + ( a+b ) ) *.5
a=4
b=10
x=(Abs(a-b)+(a+b))*.5
Print x
WaitKey()
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
01.11.2005, 23:58
|
#4
|
|
хм
ето ты сам придумал ? или где взял ?
|
|
|
02.11.2005, 01:44
|
#5
|
Бывалый
Регистрация: 22.09.2005
Сообщений: 634
Написано 36 полезных сообщений (для 102 пользователей)
|
>Выбор максимума из a,b в одну ф-лу
>x = ( Abs( a-b ) + ( a+b ) ) *.5
If a>b
x=a
else
x=b
endif
- это будет гораздо быстрее, чем куча умножений/сложений(раз в 5-6 примерно), вот тест(если не верите):
a=5
b=8
time1=MilliSecs()
For i=1 To 10000000
x = ( Abs( a-b ) + ( a+b ) ) *.5
Next
time1=MilliSecs()-time1
time2=MilliSecs()
For i=1 To 10000000
If a>b
x=a
Else
x=b
EndIf
Next
time2=MilliSecs()-time2
Print time1
Print time2
WaitKey()
|
(Offline)
|
|
02.11.2005, 16:34
|
#6
|
|
прикол у меня первый способ быстрее
у pentiumов alu рулит полюбе - вот за что их люблю , и неглючат никогда
|
|
|
Сообщение было полезно следующим пользователям:
|
|
02.11.2005, 20:55
|
#7
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Не отрицаю - все выше изложенные формулы работают медленее, конструкций условного перехода, однако, в борьбе за скорость приходится отказваться от удобочитаемости ( избавляться от функциий, юзать goto и т.п.) - так что выбор за вами. Я лишь посчитал эти формулы интересными.
Практически все где-то видел : в институте, интернете, чужом коде.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
02.11.2005, 20:58
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ф-лу минимума можно получить или эвристически или объединив ф-лы для max и чередования 2ух значений.
x = ( ( a+b ) - Abs( a-b ) ) *.5
a=10
b=1
x = ( ( a+b ) - Abs( a-b ) ) *.5
Print x
WaitKey()
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
23.01.2006, 23:01
|
#9
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Как определить, является ли число степенью двойки?
bool PowOfTwo (int num)
{
return !(num & (num-1));
}
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.01.2006, 14:33
|
#10
|
|
БЫСТРЫЙЙЙЙ ) квадратный корень с минимальной точностью
float fast_sqrt(float f)
{
float result;
_asm
{
mov eax, f
sub eax, 0x3f800000
sar eax, 1
add eax, 0x3f800000
mov result, eax
}
return result;
}
)
|
|
|
Сообщение было полезно следующим пользователям:
|
|
24.01.2006, 15:39
|
#11
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
2jimon :
продолжая борьбу за скорость: добавь ещё inline для функции
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
24.01.2006, 22:11
|
#12
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Да, хорошая функция, но огорчает, что выдает неточный результат с простыми корнями. Например, fast_sqrt(625)==25.76, а fast_sqrt(144)==12.5.
|
(Offline)
|
|
24.01.2006, 23:05
|
#13
|
|
ето не я делал... щитается дефак-то самая быстрая функция примерного извлечение квадратного корня
|
|
|
25.01.2006, 00:05
|
#14
|
Модератор
Регистрация: 13.09.2005
Сообщений: 1,835
Написано 6 полезных сообщений (для 10 пользователей)
|
Originally posted by jimon@Jan 24 2006, 10:05 PM
ето не я делал... щитается дефак-то самая быстрая функция примерного извлечение квадратного корня
|
а говорил с минимальной точностью...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:51.
|