da mein SWT-Praktikum nun fast (und relativ erfolgreich) abgeschlossen ist (präsentation war schon, nur noch n paar nachbesserungen (dabei: danke ans team, nice work!)) hab ich ja nun wieder zeit, mich mit sinnloseren sachen zu beschäftigen.
also hier mal wieder was ganz dolles (natürlich nur mit C++ möglich (haskell und sowas sind für mich keine sprachen)):
vieleicht hatten manche von euch in mathe in der uni das schieberegister. wenn man in körpern mit polynomen als elementen rechnen soll, zb GF(2)[X]/x^4+x+1, is so n schieberegister ganz hilfreich, weil man dann in nullkommanix p1*p2 mod x^4+x+1 ausrechnen kann. nun ist so n schieberegister auch auf GF(3)[X] etc erweiterbar, was dann rauskommt, sind solche zahlenkolonnen:
100
010
001
120
012...
jedenfalls hab ich s heut geschafft, ein programm dafür zu programmieren, welches mir genau diese zahlen ausgibt, ansich nichts großes, WENN ich es mir einfach gemacht hätte, aber ich würde das nich hier posten, wenn s n normales programm wär ;)
also das dolle an dem programm ist: es wird rein gar nix zur laufzeit berechnet
das wird durch die templates von C++ möglich, soll heißen, wenn man das programm kompiliert, ist alle arbeit schon getan und es wird beim starten des programmes nur noch das ergebnis angezeigt.
das war alles ein kleines experiement, um übung in C++-templates zu bekommen.
hier könnt ihr euch mal (wen es denn interessiert) den code dazu anguggn: source
falls es zu unübersichtlich ist ;P hier das herzstück des schieberegisters:
typedef typename tmp::shift::type::add<typename poly::mult<tmp::shift::rest>::type >::type next;
das is eigentlich alles, was man braucht, der rest sind helfer, damit das da funzt
Keine Kommentare:
Kommentar veröffentlichen