Помощ - Търси - Регистрирани - Календар
Пълна версия: Двоен числов тип
UniBG Forums > Дискусии > Dexter's Lab > Програмиране
demond
ок, една практическа задача:

трябва да се проектира и напише клас който има функционалността на 2 вградени типа числа едновременно - да кажем integer и float; целта е максимална ефективност при аритметични действия - примерно ако обект от този клас съдържа integer, да се прилагат само целочислени операции когато другия операнд е integer (естествено, когато е float винаги ще се прилага floating-point аритметика)

сори, скриптови езици не вършат работа тука - трябва да е на C++ (не съм сигурен че подобна концепция може да бъде осъществена и на друг език; може би и на C и/или Java, но липсата на operator overloading в тези езици ще осакати евентуалното имплементиране)

целта е решението да се вгради в симулатор на финансови модели
dx4
ako pravilno razbiram, celta e da e postigne maksimalna proizvoditelnost. ako e taka, tova edva li e pravilniqt podhod, zastoto predi vsqka operaciq, ste trqbva da se pravi proverka za tip. osven tova, ne sym siguren, che iska tozi efekt:
MyValueType(5) / 2 == MyValueType(2)


predpolatam, che se iska:
MyValueType(5) / 2 == MyValueType(2.5)
koeto protivorechi na gornata specifikaciq?

kakto si go formuliral e nevuzmojno tova tui kat gledam probvai pak wink.gif
Guest
QUOTE(demond @ Aug 30 2006, 06:50 AM)
ок, една практическа задача:

трябва да се проектира и напише клас който има функционалността на 2 вградени типа числа едновременно - да кажем integer и float; целта е максимална ефективност при аритметични действия - примерно ако обект от този клас съдържа integer, да се прилагат само целочислени операции когато другия операнд е integer (естествено, когато е float винаги ще се прилага floating-point аритметика)

сори, скриптови езици не вършат работа тука - трябва да е на C++ (не съм сигурен че подобна концепция може да бъде осъществена и на друг език; може би и на C и/или Java, но липсата на operator overloading в тези езици ще осакати евентуалното имплементиране)

целта е решението да се вгради в симулатор на финансови модели
*


Az moje bi neshto ne sum dorazbral, no tova ne go li ima v samiat C++ vgradeno? T.e. C++ nyama li nabor ot funkcii operator+(int, int) operator+(int,float), koito da se izvikvat spored tova kakuv tip sa argumentite.. inache ako go nyama, tova ne se li postiga elementarno s template ?

Edinstvenoto, koeto moje bi sum propusnal e, che e vuzmojno 2.5 * 2 da dade 5 i v sluchaja da si ostane float.. tova li e koeto ne sum uspyal da pokria s reshenieto s templates ot gorniat paragraf?
demond
не е вградено, но езика позволява да се програмира

примерно:
CODE
template <typename T1, typename T2>
struct variant {
   int type;    // 0 - T1, 1 - T2
   union { T1 t1; T2 t2; };
   variant() : type(0), t1(0), t2(0) {}
   variant& operator=(const T1 t1) { if (type) t2=t1; else this->t1=t1; return *this; }
   variant& operator=(const T2 t2) { if (type) this->t2=t2; else t1=t2; return *this; }
   operator T1() { return type? t2 : t1; }
   operator T2() { return type? t2 : t1; }
};


това обаче не е много удобно за ползване защото изисква explicit typecasts за да се избегнат ambiguities; въпроса е дали може да се подобри
Това е семпла версия на форума. За да видиш пълната версия, която има повече информация, по-добра подредба и снимки, натисни тук.
Invision Power Board © 2001-2008 Invision Power Services, Inc.