Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
2-1147368259
kilonet
2006-05-11 21:24
2006.05.28
Invalid pointer operation при проверке указателя на nil


2-1147166724
seleman
2006-05-09 13:25
2006.05.28
xpmanifest


4-1135356695
oleggar
2005-12-23 19:51
2006.05.28
file hooks


3-1144153515
RomanH
2006-04-04 16:25
2006.05.28
Обновление данных


2-1147549788
jenya_rus
2006-05-13 23:49
2006.05.28
Цикл. В чем разница?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский