информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыАтака на InternetПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[C++] Возведение в степень офигенных чисел 27.11.01 03:34  Число просмотров: 2216
Автор: Korsh <Мельников Михаил> Статус: Elderman
<"чистая" ссылка>
> Возведение a в n:
> Конечно, этот алгоритм есть смысл использовать только на
> чём-то много большем, чем int, хотя и на int он будет
> быстрее.
Проще использавоть банальную рекурсию.
<programming>
[C] Алгоритм возведения числа в степень... 26.11.01 13:34    Штраф: 10
Автор: crk Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Хелп... Вводим число(x), вводим степерь(y) и требуется чтобы число умножилось само на себя y-раз =)

Я что-то в цикле запутался ... хелп...

Только использовать <stdio.h> :) Никаких там pow(x,y) ;)))
Если есть там exp() и ln(). 26.11.01 23:14  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
... То можно:

x^a = exp(a*ln(x))
[C++] Возведение в степень офигенных чисел 26.11.01 17:34  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
Возведение a в n:
	Пускай ni - i-ый бит с конца числа n (начиная с i=0).
	Пускай pow(a, n) = a^n (а то замучусь).
	
	Очевидно a^n = a^(n0*2^0 + n1*2^1 + ... + nk*k^k).
	a^n = a^(n0*2^0) * a^(n1*2^1) * ... * a^(nk*2^k)
	
	Пускай a[i] = a^(2^i)
	Тоесть a^n - произведение a[i], таких, что ni=1

	Осталось заметить a[i] = a^(2^i) = a^(2^(i-1) + 2^(i-1)) =
	a^2^(i-1) * a^2^(i-1) = a[i-1] * a[i-1] = a[i-1]^2

А вот реализация:
inline int pow(int a, int n)
{
	for (int ret=1; n>0; a*=a, n>>=1)
		if (n&1)
			ret *= a;
	return ret;
}

---
Конечно, этот алгоритм есть смысл использовать только на чём-то много большем, чем int, хотя и на int он будет быстрее.
[C++] Возведение в степень офигенных чисел 27.11.01 03:34  
Автор: Korsh <Мельников Михаил> Статус: Elderman
<"чистая" ссылка>
> Возведение a в n:
> Конечно, этот алгоритм есть смысл использовать только на
> чём-то много большем, чем int, хотя и на int он будет
> быстрее.
Проще использавоть банальную рекурсию.
[C++] Возведение в степень офигенных чисел 27.11.01 04:36  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> Проще использавоть банальную рекурсию.
Конкретней, пожалуйста... Что значит проще?
Куда уж проще то - один фор, один иф, 1 и, 1 умножить, 1 сдвиг, и оди "в квадрат".
Да и быстрее особо не придумаешь - разве что у меня можно n>>1 & 1 переделать в цикл по битам n - чтоб не сдвигать.
Ну, ещё последнее умножение - лишнее. Но это, чтоб пример не усложнять.
А чтоб код проще был - так проще for(i=0 ++i<n; result*=a); как ни крути :)
[C++] Возведение в степень офигенных чисел 27.11.01 08:00  
Автор: Korsh <Мельников Михаил> Статус: Elderman
<"чистая" ссылка>
> > Проще использавоть банальную рекурсию.
> Конкретней, пожалуйста... Что значит проще?
> Куда уж проще то - один фор, один иф, 1 и, 1 умножить, 1
> сдвиг, и оди "в квадрат".
> Да и быстрее особо не придумаешь - разве что у меня можно
> n>>1 & 1 переделать в цикл по битам n - чтоб не
> сдвигать.
> Ну, ещё последнее умножение - лишнее. Но это, чтоб пример
> не усложнять.
> А чтоб код проще был - так проще for(i=0 ++i<n;
> result*=a); как ни крути :)
Согласен
Ты кстати в ACM Programming Contest не учавствовал?
[C++] Возведение в степень офигенных чисел 27.11.01 20:53  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> Ты кстати в ACM Programming Contest не учавствовал?
Я даже не знаю, что это такое :)
Подозреваю: соревнование. Единственное, в чём я участвовал по информатике - Киевская для школьников. Ужасная олимпиада, полный идиотизм. Участвовал только ради льгот при поступлении в вуз.
[C++] Возведение в степень офигенных чисел 28.11.01 01:26  
Автор: Korsh <Мельников Михаил> Статус: Elderman
<"чистая" ссылка>
> > Ты кстати в ACM Programming Contest не учавствовал?
> Я даже не знаю, что это такое :)
Правильно подозреваешь. Это мировая олимпиада по программированию среди студентов. месяц назад у нас(во Владивостоке) прошел четвертьфинал
по дальневосточному региону по северовосточной европе. Скоро полуфинал.
Получи и скомпиль на с++ 26.11.01 14:11  
Автор: Pitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Да никаких траблов!!!!

int a = x;
For(int i = 1; i < y; i++)
{
x=x*a;
}
Получи и скомпиль на с++ 26.11.01 15:16  
Автор: crk Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Да никаких траблов!!!!
>
> int a = x;
> For(int i = 1; i < y; i++)
> {
> x=x*a;
> }

а ошибка у меня была в x=x*x :)))
Для возведения в степень положительных оснований 26.11.01 15:09  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
#include <stdio.h>
#include <math.h>

float DoPow(float a, float x){
if (a >= 0) return exp(x*log(a));
else return 0; // сорри, но как умножить отрицательное число я не знаю
}

int main(void){
printf("%f",DoPow(3,3));
return 0;
}

P.S. crk - пора пользоваться своей головой !
Для возведения в степень положительных оснований 26.11.01 20:06  
Автор: nnnn Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> #include <stdio.h>
> #include <math.h>
>
> float DoPow(float a, float x){
> if (a >= 0) return exp(x*log(a));
> else return 0; // сорри, но как умножить отрицательное
> число я не знаю
> }
>
> int main(void){
> printf("%f",DoPow(3,3));
> return 0;
> }
>
> P.S. crk - пора пользоваться своей головой !

a u tebya manual est' ? :))))
Спасибо! 26.11.01 15:15  
Автор: crk Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach