Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возведение в степень


Страницы:   1 2

gamez ©   (2008-04-27 00:17:00) 

Как байтовою переменную возвести в степень.?
Вот нашел такую функцию.
Пишет несоответствие типов Byte and Extended

function step(x:byte;k:byte):byte;
begin
    step:=Exp(k*ln(x));
end;


han_malign   (2008-04-29 11:09:00) [1]


> Между прочим 255^255 ~ 5E613

- зато 255^255 mod 10 = 5 - если по MBo©(27.04.08 08:05)[16] - то без переполнений...
http://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8E_%D0%BD%D0%B0%D1%82%D1%83%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0
если в лоб то for K do Result:= (Result * Value) mod N;

З.Ы. Для модулей > 128 нужен буфер > 8 бит, но для x86 - (Result * Value)- расширяется до 32-бит и на mod Nполучаем корректный результат без переполнения.


palva   (2008-04-28 22:30:00) [2]

Спрашивается, зачем возводить в степень, если потом все равно надо брать по модулю 10.
Это все равно, если бы я стал перемножать десятизначные числа столбиком только для того, чтобы узнать, будет ли четным результат.


Игорь Шевченко   (2008-04-28 16:33:00) [3]


> Если быть точным, то Вам нужно делать так


255 в степени 1 mod 10 чему будет равно ?


Jeer   (2008-04-28 16:08:00) [4]

Между прочим 255^255 ~ 5E613


icWasya   (2008-04-28 15:19:00) [5]

>gamez   (27.04.08 00:36) [4]
>.Я  читаю файл по байтно в переменую b
И с переменной b нужно проделать такую операцию:
b := Step(b,e) mod n;

На прямую код из [18] брать нельзя, так как не обрабатывается переполнение.
Если быть точным, то Вам нужно делать так

const M = 191; // или сколько там
function AddM(A,B:Byte):Byte;
begin
 Result:=(A+B) mod M;
end;
function MulM(A,B:Byte):Byte;
begin
 Result:=(A*B) mod M;
end;
function Step (Value, Power: Byte): Byte;
var
I: Integer;
begin
if Power = 0 then
  Result := 1
else
begin
  Result := Value;
  for I := 2 to Power do
    Result := MulM(Result, Value);
end;
end;// не самый оптимальный вариант, но...


Palladin   (2008-04-27 11:55:00) [6]


>gamez (27.04.08 01:12) [10]

LMD


Игорь Шевченко   (2008-04-27 11:18:00) [7]

gamez   (27.04.08 01:12) [10]


>
> Ты что думаеш, что я обкурился и не знаю как воспроизвести
> в степень
> число .
> Ты байтовый тип в степень воспроизведи !!!


function BytePower (Value, Power: Byte): Byte;
var
 I: Integer;
begin
 if Power = 0 then
   Result := 1
 else
 begin
   Result := Value;
   for I := 2 to Power do
     Result := Result * Value;
 end;
end;


Anatoly Podgoretsky   (2008-04-27 11:05:00) [8]

Без грибов тут дело не обошлось.


MBo   (2008-04-27 08:05:00) [9]

http://algolist.manual.ru/maths/count_fast/fast_exp.php


korneley   (2008-04-27 06:41:00) [10]


> Германн ©   (27.04.08 02:01) [14]
> Но вот
> возводить в степень "тип", ещё никто, никогда не пытался.
Приношу извинения за офтоп, но не менее забавно.
http://www.rusf.ru/lukin/books/tipa_artikl.htm


Германн   (2008-04-27 02:01:00) [11]

Не. Ну я, конечно, отдыхаю после напряженного (хоть и не трудового дня). Поэтому не всё сразу схватываю. Но уж если, то...

> Ты что думаеш, что я обкурился и не знаю как воспроизвести
> в степень
> число .
> Ты байтовый тип в степень воспроизведи !!!
>

Таперича я заметил другую чушь в данном сообщении.
Автор знает как возвести в степень число. (Ну, это он так думает, что знает. Но что он знает нам не ведомо). Но вот возводить в степень "тип", ещё никто, никогда не пытался. По-крайней мере находясь в здравой памяти и в здравом рассудке.

P.S. Я не столь кровожаден как Johnmen ©, но я сторонник идеи Кэтмара.
Дворников не хватает, а представителей семейства ЖЗЧ уже слишком много.


Германн   (2008-04-27 01:27:00) [12]


> и не знаю как воспроизвестив степень
> число .

Этого вообще никто не знает. Кроме тебя. :)


Johnmen   (2008-04-27 01:17:00) [13]

Удавись. Доставь нам радость...


Германн   (2008-04-27 01:17:00) [14]


> gamez   (27.04.08 01:12) [10]
>
> Ха ХА !!!
> Может кто мне табличку умножение ещё подкинет. !!!
>
> Игорь Шевченко ©   (27.04.08 01:05) [9]
>
> Ты что думаеш, что я обкурился и не знаю как воспроизвести
> в степень
> число .
> Ты байтовый тип в степень воспроизведи !!!
>

А что? И подкинем. И учебник по арифметике тоже. Похоже он тебе не помешает.


gamez   (2008-04-27 01:12:00) [15]

Ха ХА !!!
Может кто мне табличку умножение ещё подкинет. !!!

Игорь Шевченко ©   (27.04.08 01:05) [9]

Ты что думаеш, что я обкурился и не знаю как воспроизвести в степень
число.
Ты байтовый тип в степень воспроизведи !!!


Игорь Шевченко   (2008-04-27 01:05:00) [16]


> Как байтовою переменную возвести в степень.?


умножить несколько раз на саму себя


Johnmen   (2008-04-27 01:02:00) [17]


> Ну и как мне быть?

Удавиться?


{RASkov}   (2008-04-27 01:00:00) [18]

> [6] gamez   (27.04.08 00:58)
> Ну и как мне быть?

Думать, а не валять дурака... :(


gamez   (2008-04-27 00:58:00) [19]

Вот типы :
Byte        0...255  
ShortInt   -128...+127
Word       0...65 535  
Integer  -32 768...+32 767  
LongInt  -2 147 483 648...+2 147 483 647  

Я файл читаю побайтно, а каждый байт файла мне нужно выщитать по формуле b := Step(b,e) mod n;
Ну и как мне быть?


Восхищенный   (2008-04-27 00:43:00) [20]

> gamez   (27.04.08 00:36) [4]

> В паскале нет функции для возведения числа в степень.

Это знают все. А ты не знаешь типов данных. Как, по-твоему, результат 255^255 может уместиться в 1 байте? Или как можно загнать дробное в целое, не обрезая его?

Не знаешь ты типов данных. А без них - бесполезно. Прочти хоть 10 страниц.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо