Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.25;
Скачать: CL | DM;

Вниз

Возведение в степень   Найти похожие ветки 

 
gamez   (2008-04-27 00:17) [0]

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

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


 
DrPass ©   (2008-04-27 00:21) [1]

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


 
gamez   (2008-04-27 00:27) [2]

Не работает..
Вот пример который мне нужно решить и компилятор указывает на переменную b

N,P,Q,D,E,C: integer;
....
b := Step(b,e) mod n;


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

> gamez

Это уже совсем другая ошибка.

Слушай, ты хоть один раз хоть пару страниц хоть одной книжки по Паскалю прочитал?

Здесь тебя ему обучать не станут, долго слишком.


 
gamez   (2008-04-27 00:36) [4]

В паскале нет функции для возведения числа в степень.
Воспользовавшись формулой
XV = eV ln X.
выходит такая функция
function step(x:byte;k:byte):extended;
begin
  step:=Exp(k*ln(x));
end;

У получается не соответствие типов.Я  читаю файл по байтно в переменую b
И с переменной b нужно проделать такую операцию:
b := Step(b,e) mod n;


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

> gamez   (27.04.08 00:36) [4]

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

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

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


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

Вот типы :
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;
Ну и как мне быть?


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

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

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


 
Johnmen ©   (2008-04-27 01:02) [8]


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

Удавиться?


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


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


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


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

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

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

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


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


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

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


 
Johnmen ©   (2008-04-27 01:17) [12]

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


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


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

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


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

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

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

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

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


 
korneley ©   (2008-04-27 06:41) [15]


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


 
MBo ©   (2008-04-27 08:05) [16]

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


 
Anatoly Podgoretsky ©   (2008-04-27 11:05) [17]

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


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

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;


 
Palladin ©   (2008-04-27 11:55) [19]


>gamez (27.04.08 01:12) [10]

LMD


 
icWasya ©   (2008-04-28 15:19) [20]

>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;// не самый оптимальный вариант, но...



 
Jeer ©   (2008-04-28 16:08) [21]

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


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


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


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


 
palva ©   (2008-04-28 22:30) [23]

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


 
han_malign ©   (2008-04-29 11:09) [24]


> Между прочим 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 получаем корректный результат без переполнения.



Страницы: 1 вся ветка

Текущий архив: 2008.05.25;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
2-1209300169
homm
2008-04-27 16:42
2008.05.25
Как из Тmemo удалить последний перенос строки?


15-1207899177
f_chel
2008-04-11 11:32
2008.05.25
Монитор


3-1198050542
Андрей Пл
2007-12-19 10:49
2008.05.25
не выполняеться запрос типа select * , device from BRIEFCASE


2-1208946250
tiaEver
2008-04-23 14:24
2008.05.25
Загрузить шрифт в рантайм


2-1209639326
lewka-serdceed
2008-05-01 14:55
2008.05.25
Удаление файла