Страница 1 из 2
		
			
				Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 11:30:59 Andreich
				Всем доброго времени суток! Собственно говоря интересует сабж. 
Быть может кто сталкивался с данной задачей? Требуется реализовать набор процедур для формирования целых чисел произвольной длины, их сложения, вычитания, деления и умножения. 
Поспрашивал у яндекса, но он по большей части предлагает мудреные варианты на С++ в котором я не силен. Так что буду очень признателен за любую информацию по теме.
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 11:57:27 voltron
				Что-то такое у меня было, и даже для Delphi/TurboPascal. Вечером дома поищу и выложу.
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 12:34:48 Timid
				Погугли Delphi+RSA - в самописных модулях используется работа с большими числами (80 знаков и более).
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 13:35:58 Astralis
				Советовал бы более внимательно подходить к выбору алгоритмов для математических операций. Например, умножение и деление лучше реализовывать с помощью метода Фурье, для возведения в целую степень существует специальное дерево, которое минимизирует количество мультипликаций.
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 16:01:07 Timid
				Astralis писал(а):Советовал бы более внимательно подходить к выбору алгоритмов для математических операций. Например, умножение и деление лучше реализовывать с помощью метода Фурье, для возведения в целую степень существует специальное дерево, которое минимизирует количество мультипликаций.
Я думаю, что в данном случае достаточно логических операций с "длинными" двоичными числами и без особого внимания к скорости.
 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 16:58:12 Astralis
				А если вопросы производительности не так критичны, то значит числа не очень длинные, вполне может подойти 
данный модуль, который реализует работу с типом int256.
 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 18:55:49 Andreich
				voltron писал(а):Что-то такое у меня было, и даже для Delphi/TurboPascal. Вечером дома поищу и выложу.
 Было бы здорово! )
Astralis писал(а):А если вопросы производительности не так критичны, то значит числа не очень длинные, вполне может подойти данный модуль, который реализует работу с типом int256.
 Модуль посмотрел... по большей части ассемблер. Если говорить о производительности, то она не так уж важна, здесь меня больше интересует сам принцип работы с длинными целыми числами.
 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 21:35:51 alexrayne
				вродеб принципы одинаковые на всех числах, что малых что больших
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 22:46:46 Astralis
				Сложение очень легко реализуется благодаря команде adc, которая оперирует с флагом переноса. Вычитание организуется за счет использования дополненительного кода (дополнение до 2). За счет дополнительного кода операции деления и умножения получаются чуть сложнее, но они и так являются медленными, а обычные алгоритмы являются квадратичными. В природе есть почти линейный алгоритм умножения, но он не так прост в реализации, а выигрыш заметен лишь для чисел очень большой размрности.
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
09.03.2010 23:41:54 Padre_Mortius
				Когда-то очень давно баловался с возведением в степень больших чисел (типа 1996^1996). в итоге рассматривал вариант представления чисел как массивов. И соответственно работу с ними, как обычно в тетрадке в столбик умножали. Реализация проста до невозможности и вроде как не самая медленная.
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
10.03.2010 01:36:07 Astralis
				Хотите сказать, что делали 1995 мультипликаций вместо возможных всего 15?
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
10.03.2010 10:42:11 Padre_Mortius
				делал и так и так.
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
10.03.2010 12:09:20 Andreich
				А какой самый "большой" стандартный тип для целых чисел? Есть ли больше чем Int64?
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
10.03.2010 14:02:23 Astralis
				Максимальный стандартный это Int64. Но допустим в Object Pascal для 32 разрядных платформ он не был полноценным целочисленными например для цикла for с переменной типа int64 возникает ошибка компиляции, что-то вроде  "тип с плавающей точкой нельзя использовать для цикла for".
С другой стороны никто не мешает сделать собственный тип данных и переопределить арифметические операции.
Например тип TGUID определен ка record, но сущность его все равно остается целочисленной.
А в совершенном языке программирования SmallTalk целые числа могут иметь произвольную длину.
			 
			
		
			
				Re: Работа с целыми числами произвольной длины...
				
Добавлено: 
10.03.2010 20:40:07 voltron
				Вот немного информации по работе с большими числами и примеры кода.