|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
25.01.2006, 20:35
|
#16
|
Модератор
Регистрация: 13.09.2005
Сообщений: 1,835
Написано 6 полезных сообщений (для 10 пользователей)
|
Originally posted by jimon@Jan 25 2006, 06:10 PM
ну всеже она может хоть чучуть сказать какой корень
|
гы... нафиг такое надо? ф топку!
|
(Offline)
|
|
25.01.2006, 23:10
|
#17
|
ПроЭктировщик
Регистрация: 03.12.2005
Сообщений: 111
Написано 0 полезных сообщений (для 0 пользователей)
|
Может я ещё не опоздал ?
alcoSHoLiK
Как определить, является ли число степенью двойки?
|
если я понял правильно, то ето можно решить так :
перевести число в Bin и одна проверка
при одной 1 (может слова не те )
True
правые 0 откинуть, левые : степень, для 2 .
|
ещё можно такой способ, не только для двойки
(а вернее для не степени двойки оснований ) :
1)извлекаем кв.корень
2)проверяем на целосность (вроде натуральное называется)
True
3)делим число на основание
4)проверяем на целосность
Return true
False
Меняем 1) и 3) местами
|
подумаю ещё над приоритетом 1)2)3) и 3)2)1)
про узнавании степени не додумал ,пока.
PS ещё про корни :
где-то в древности корень примерно извлекали так
sqr(a)=sqr(b^2+c)~b+(c/2b)
где
B^2 > С
чем больше
тем точнее
Описал I в.н.э. древнегреческий ученый Героном Александрийский
|
(Offline)
|
|
26.01.2006, 01:28
|
#18
|
Модератор
Регистрация: 13.09.2005
Сообщений: 1,835
Написано 6 полезных сообщений (для 10 пользователей)
|
to Kain
в формулу корня особо не вникал, но она не пригодится, т.к. в правой части всё равно есть корень... время не выиграем... так што можно считать как обычно ( что не на много быстрее)
алгоритмы - это конечно хорошо, но тут вроде как "Любопытные формулы"
и к тому же alcoSHoLiK уже написал формулу "проверка числа на степень 2":
bool PowOfTwo (int num)
{
*return !(num & (num-1));
}
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо alex-mad за это полезное сообщение:
|
|
26.01.2006, 22:46
|
#19
|
ПроЭктировщик
Регистрация: 03.12.2005
Сообщений: 111
Написано 0 полезных сообщений (для 0 пользователей)
|
Формула не для пользования была приведена, а для справки
так считали 4000 лет назад....
учебник Алгебры 8 класса
1)у alcoSHoLiK 'а стоит знак вопроса
2)ето не для блица (тупо посмотрел справку,нету там
а так как я не профи, как понял так и ответил
а вообще когда есть двусмысленность пишите как impersonalis:
ответ (читать ... ... .. )
|
(Offline)
|
|
07.02.2007, 11:29
|
#20
|
AnyKey`щик
Регистрация: 07.02.2007
Сообщений: 3
Написано 0 полезных сообщений (для 0 пользователей)
|
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 мск.
Так что оставил первый. Может кто-то лучше напишет, вставлю себе.
|
(Offline)
|
|
18.10.2007, 15:55
|
#21
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Любопытные формулы
((char*)&w)[sizeof(w)-1]&=~(1<<7);
Где w - float или double. Зануляет знаковый бит числа - аналог fabs. Не претендую на скорость выполнения - просто извращённая формула, порождённая моим мозгом.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
26.12.2007, 13:11
|
#22
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Любопытные формулы
((char*)&w)[sizeof(w)-1]&=~(1<<7);
|
интересно, компилятор ~(1<<7) рассчитает как константу? или в рантайме будет это считать?
jimon-у спасибо за быстрыыыыый корень.
2Imeprsionalis - inline не получится вставить. там код на asm-e.
|
(Offline)
|
|
26.12.2007, 19:14
|
#23
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Любопытные формулы
Константные выражения компилятор считать умеет. Если не доверяешь ему, смотри сгенерированные асм-листинги.
|
(Offline)
|
|
04.10.2008, 23:42
|
#24
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Любопытные формулы
<<jimon>> (23:32:19 4/10/200
http://www.graphics.stanford.edu/~seander/bithacks.html канопляное поле - единство битовой вселенной !
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.11.2009, 08:54
|
#25
|
AnyKey`щик
Регистрация: 19.07.2008
Сообщений: 12
Написано одно полезное сообщение (для 2 участников)
|
Ответ: Любопытные формулы
Формула для возведения числа в любую степень и извлечения любого корня:
exp(b*ln(a)),
где a - число, которое возводим в степень, b - степень в которую возводим, exp - экспонента, ln - натуральный логарифм.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо ~Lexx~ за это полезное сообщение:
|
|
09.02.2010, 16:42
|
#26
|
Оператор ЭВМ
Регистрация: 09.10.2007
Сообщений: 45
Написано 8 полезных сообщений (для 16 пользователей)
|
Ответ: Любопытные формулы
формула возвращает 0 если (параметр<0) или параметр, если (параметр=>0)result= ( parameter+Abs(parameter) )/2
понадобилось при прохождении массива по элементам, во избежание минусовых индексов.
не самый быстрый и правильный вариант решения задачи, но может кому пригодится.
|
(Offline)
|
|
09.02.2010, 19:33
|
#27
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Любопытные формулы
result = parameter*(parameter>0) , не?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
09.02.2010, 22:56
|
#28
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Любопытные формулы
если учитовать строго условие то по задумке
result = parameter*(parameter>=0)
|
(Offline)
|
|
10.02.2010, 05:02
|
#29
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Любопытные формулы
Сообщение от ABTOMAT
result = parameter*(parameter>0) , не?
|
Автор же написал:
не самый быстрый и правильный вариант решения задачи
|
Здесь не мало примеров формул нерациональных, но любопытных.
Думаю - стоит перместить тред в Математику (там она будет более к месту, не смущая брейнфачными решениями).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
10.02.2010, 07:22
|
#30
|
Оператор ЭВМ
Регистрация: 02.11.2008
Сообщений: 27
Написано 12 полезных сообщений (для 24 пользователей)
|
Ответ: Re: Любопытные формулы
Сообщение от N.O.T.
Нужно было догнать любое число до первого большего с основанием 2 в N-степени, пример: если число 31, то резалт должен быть 32, если 257, то 512 и т.д.
Может кто-то лучше напишет, вставлю себе.
|
x -= 1;
x |= (x >> 1);
x |= (x >> 2);
x |= (x >> 4);
x |= (x >> 8);
x |= (x >> 16);
x += 1;
^__^
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:01.
|