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

Вниз

новый тип   Найти похожие ветки 

 
Sergiony   (2006-05-11 01:03) [0]

Приветсвую всех мастеров!
как создать свой тип целого числа например как int64, но int128, чтобы с ним можно было производить все математические операциии как и с int64?


 
Пусик ©   (2006-05-11 01:06) [1]

Такое невозможно в Delphi до версии 7. Вряд ли возможно и в следующих.


 
DevilDevil ©   (2006-05-11 01:38) [2]

пока не выйдет 64й Delphi, тебе придётся реализовывать всё самостоятель (что очень сложно). Могу посоветовать использовать вещественный double


 
Джо ©   (2006-05-11 01:44) [3]

Отчего же, отчего же.
В Делфи 2006 появились две прекрасные вещи: методы в записях и перегрузка операторов для них же.
Таким образом относительно непросто и, несомненно, красиво, можно реализовать желаемое :)

Например, создадим такую вот запись:

 TInt128 = record
   Data: array [0..15] of Byte; // тут актуальные данные
   class operator Add (A,B: TInt128): TInt128; // метод сложения
   class operator Add (A: TInt128; B: Integer): TInt128; // еще один
   class operator Implicit (A: Integer): TInt128; // приведение типов
   // реализуем также вычитание, целочисл. деление
   // и все остальное, что необходимо,
   // включая оператор сравнения
 end;

Для реализации такой вещи нужно немного разобраться с арифметикой над большими числами и проделать немного чисто формальной работы.
И в результате будут возможны такие конструкции как:

var
 Val1,
 Val2: TInt128;
begin
 Val2 := 12345;
 Val1 := Val2 + 200;
end;

и тому подобные :)


 
Джо ©   (2006-05-11 01:44) [4]

> относительно непросто

относительно просто :)


 
Anatoly Podgoretsky ©   (2006-05-11 09:17) [5]

Джо ©   (11.05.06 01:44) [3]
Да это легко заменяется на
Val1 := Add(Val2,  200);
Чем оно по сути и является. Что хорошо видно в АДА, там обязательно определяется оператор и могут использоваться все три формы, кроме указаных двух, еще и "+"(A, B)



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

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

Наверх




Память: 0.47 MB
Время: 0.039 c
2-1147111725
Nicky
2006-05-08 22:08
2006.05.28
Ошибка при проссмотре отчета


1-1145630809
Sam Stone
2006-04-21 18:46
2006.05.28
Задача оптимального раскроя


5-1131449740
Илья Бобров
2005-11-08 14:35
2006.05.28
Дополнительные строки


1-1145075103
anubis
2006-04-15 08:25
2006.05.28
как загрузить иконку в image list


1-1145336420
Alextp
2006-04-18 09:00
2006.05.28
Выравнивание shortcut-ов в меню