Главная страница
    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.012 c
2-1147474989
Призрак
2006-05-13 03:03
2006.05.28
Synchronize


1-1145395794
MZUser
2006-04-19 01:29
2006.05.28
EXE из памяти


15-1146302203
Iv95
2006-04-29 13:16
2006.05.28
Почему программы грузятся медленнее...


15-1146556510
Untermensch
2006-05-02 11:55
2006.05.28
Подскажите, какую нить библиотечку попроще, для MsSQL2005


4-1138902028
nick4u
2006-02-02 20:40
2006.05.28
Как работать с com портом???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский