C
volkard schrieb:
@camper: du scheinst so ne klasse schon fertig zu haben. magste die zeigen? oder wenn nicht fertig, dann ein paar fragmente. deine überlegungen sind toll, da mag ich was lernen von.
und base_int sollte Digit heißen.
eigentlich hab ich da nichts, die überlegungen sind im grunde nur solche zu anderen problemen die ich hierauf übertragen habe. aber vielleicht skizziere ich noch ein paar sachen.
ein paar dinge, die noch zu überlegen sind:
- vorzeichenlose/-behaftete zahlen, dem grunde nach gibt es keinen grund, vorzeichenlose zahlen zu haben, denn speicherplatz ist ja formal kein problem. dann muss man sich aber überlegen, wie negative zahlen darzustellen sind - die wahl beeinflusst die komplexität (nicht im sinne von O() aber als text) der algorithmen; es bieten sich an 1er-/2er komplement (hier muss man die zahl ggf. künstlich verländern) oder signed magnitude (eine kurze übersetzung fällt mir dazu gerade nicht ein).
- hat man integer, möchte man vielleicht auch fixkomma zahlen haben (die durchaus in beide richtungen vom komma wachsen können). mit dem richtigen dreh, sollte man das unter einen hut bekommen können
- speicherverwaltungsmässig hat man verschiedene optionen, ich habe hier der bequemlichkeit halber vector gewählt, so kann ich mich erst mal auf die grundlegenden funktionen konzentrieren; aber es gibt hier die üblichen optionen: normales oder überladens new/delete und/oder per allokator evtl. mit referenzcounting
- lazy evaluation von ausdrücken mittels expression templates: das ist zum glück weitgehend orthogonal zum rest, man kann also erst einmal etwas fertiges bauen und diese funktionalität später integrieren; selbiges gilt für exotischere sachen wie assembler routinen
zu meinem code oben: es fehlt nat. noch ein return in add
und statt b < a (das ja eine komplexität von O(N) hat), genügt es, die anzahl der stellen jeder zahl zu vergleichen - sofern beide zahlen dieselbe anzahl von stellen haben, spielt die reihenfolge ja keine rolle