Re[5]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended
Hello Максим,
Wednesday, March 2, 2005, 7:58:38 PM, you wrote:
>> Штука в том, что mod "не расчитан" на тип extended - он же не
>> целочисленный. Тут даже говорить об остатке неверно чисто
>> математически. Но думаю, делу можно помочь, земенив деление сложением
>> и вычитанием. Рассмотрим такой алгоритм. Пусть есть делимое A и
>> делитель B. Возьмем число С, присвоим ему стартовое значение B и будем
>> увеличивать С на число B до тех пор, пока очередная порция С+B не
>> превзойдет А. Тогда А-С даст нужный остаток.
>> ..................
>> var
>> a,b,c :Extended;
>> begin
>> .......................
>> c := b;
>> while c+b <= a do
>> c := c + b;
>> ..............
>> Result := a - c; // "воображаемый" результат
>> end;
М> Большое спасибо за помощь, Вадим. У вас, да и у других, кто читал мои
М> письма наверное сложилось неверное
М> впечатление обо мне из-за небольшой моей неточности: я не собирался
М> применять функцию mod для нахождения остатка от деления нецелых чисел. Мне
М> необходимо оперировать с целыми аргументами, которые по длине
М> превышают все типы данных, и к extended они относятся лишь потому, что
М> входят в диапазон его допутимых значений, но они целые. Как я говорил
М> раньше, я проектирую криптосистему на основе RSA, а как известно,
М> криптостойкость RSA зависит от длины модуля и длины ключей, то есть
М> чем больше модуль, тем лучше будет криптосистема. И в дальнейшем, у меня
М> появится необходимиость оперировать с чилами, превышающими по длине
М> все типы данных в Паскале. Мне подсказали, что для этого необходимо
М> представлять эти числа в программе с помощью массивов. Не могли бы вы
М> подробнее рассказать об этом. Заранее спасибо.
Вопрос, который мне непонятен (сразу говорю, что в криптографии я -
баран): каким образом Вы храните эти самые "очень большие" числа,
если они не "вписываются" в имеющиеся типы? Или такие числа должны
получаться в результате операций над более "простыми" числами? Вопрос
отнюдь не риторический и вот почему: при использовании массивов само
число должно быть куда-то записано, чтобы разложить его на разряды и
значение каждого разряда записывается в i-ый элемент массива, если
только я правильно понимаю эту идею, а переменную мы для этого числа
опять-таки не можем - замекнутый. Хотя сама идея правильна.
Я же возвращаюсь к своему первому по этой теме письму - нельзя ли
хранить все эти числа в виде строк, например:
'13762890937893478956903896'
+
'6789478324798686'
Во-первых, это дает практически неограниченную "велечину" числа, а
во-вторых, к строкам можно применить алгоритм, описанный выше, немного
его доработав. Платой за это может быть лишь потери скорости
обработки.
Если Вам это не покажется бредом, могу привести полный алгоритм.
Пишите.