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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Если есть там exp() и ln(). 26.11.01 23:14  Число просмотров: 1587
Автор: 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-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach