информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Атака на InternetГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Если есть там exp() и ln(). 26.11.01 23:14  Число просмотров: 1402
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
... То можно:

x^a = exp(a*ln(x))
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach