![]() |
Eigenes Zahlensystem -> Performance
Aloa!
Ich habe mir ein kleines Zahlensystem entwickelt, so ähnlich wie IPs aufgebaut sind. Jede "Zahl" besteht aus einer Anzahl von Gliedern.
Delphi-Quellcode:
Jedes dieser Glieder kann einen maximalen Wert annehmen, wobei der maximale Wert von Glied zu Glied unterschiedlich sein kann, also wäre eine "größte Zahl" beispielsweise:
0.0.0.0
Delphi-Quellcode:
Erhöht man den Wert dieser "Zahl" um 1, so wird zuerst das rechteste Glied um eins erhöht. Sollte es bereits seinen Maximalwert haben, wird das Glied links davon um eins erhöht und das rechte wieder auf 0 bzw den Anfangswert gesetzt. Gibt es kein Element mehr links davon, wird ein neues angefügt oder falls ein vorher festgelegter Maximalgliedwert definiert wurde bleibt das Glied einfach auf Maximalwert.
3.36.5.78
ein Zahlenbereich mit dem Teilmaximalwert von 30 und 6 Gliedern ginge also von
Delphi-Quellcode:
bis
0.0.0.0.0.0
Delphi-Quellcode:
und würde 427.518.000 verschiedene "Zahlen" beinhalten.
30.30.30.30.30.30
Nun zur eigentlichen Frage: 1. Gibt es sowas eigentlich und wenn ja, wie tauft es sich 2. Wie lässt sich eine Werterhöhung am performantesten durchführen? Ich hätte spontan an eine rekursive Funktion gedacht, die sind aber meistens vergleichsweise ineffizient. Ich hoffe auf eure Anregungen :) |
Re: Eigenes Zahlensystem -> Performance
Ich hätte jetzt grob gesagt das es das schon gibt
z.b. wenn du nur bis 16(oder besser gesagt 0-15) gehst und die punkt weg läst und sagst das ein zeichen das ist was bei dir zwischen den punkten steht wäre das das hexadezimale zahlensystem. Deins ist dan etwas universeller! mfg Flo85 |
Re: Eigenes Zahlensystem -> Performance
Also wenn die Grenzen 365.24.60.60.1000 wären, dann ist es unser Zeitsystem :mrgreen:
Ich würde das so erhöhen:
Delphi-Quellcode:
Nur weiß ich nicht ob es effizienter ist.
milli := milli + 1
if milli>1000 then begin milli := 0; sek := sek + 1; if sek>60 then begin sek := 0; min := min + 1; ... Flare |
Re: Eigenes Zahlensystem -> Performance
Zitat:
Zitat:
Code:
Funktion Add(Wert1, Wert2, Übertrag = 0)
{ segment = 0; wiederhole { Wert1[segment] = Wert1[segment] + Wert2[segment] + Übertrag; Übertrag = Wert1[segment] / maximalwert(Wert1[segment]); Wert1[segment] = Wert1[segment] % maximalwert(Wert1[segment]); segment++; } bis Übertrag = 0; } |
Re: Eigenes Zahlensystem -> Performance
Was mir gerade eben einfällt. Dieses "Zahlensystem" ist doch garantiert nur für irgendeine Anzeige gedacht, oder sehe ich das falsch?
Wenn dem so sei, dann kannst du ja eine Funktion schreiben, die einen Integer-Wert (wenn der dir zu klein ist eben Int64) in dieses Format umwandelt und rechnen tust du mit dem Integer, das dürfte (auf Software-Ebene) das schnellste sein. Flare |
Re: Eigenes Zahlensystem -> Performance
Wo soll den später der Vorteil eines solchen Systems liegen? Ich sehe ihn nicht weder Addition, Multiplikation oder in der Anzeige oder bei inc/dec. Wo liegt der Vorteil?
|
Re: Eigenes Zahlensystem -> Performance
Zitat:
Zitat:
@Frickeldrecktuxer: danke, werde es mir mahl zu Gemüte führen Sobald das Produkt fertig ist bekommt ihr es hier in der DP sowieso zu sehen, also Geduld :wink: |
Re: Eigenes Zahlensystem -> Performance
Gibt es tatsächlich schon (zumindest ohne die Punkte, die aber ja auch nicht wirklich neue Information hinzufügen), nennt sich Stellenwertsystem. Wenn alle Stellen die gleiche Wertigkeit (sprich: gleiche Obergrenze) haben, spricht man von einem polyadischen Zahlensystem.
|
Re: Eigenes Zahlensystem -> Performance
Zitat:
Dein Alphabet sieht so aus: [SUMME]31 := {0, 1, . . ., 30} Besser wäre [SUMME]31 := {0, 1, . . , 9, A, B, . . . U} (Spart dir die Punkte => "normales" Zahlensystem) Gängige Zahlensysteme sind z.B.: [SUMME]2 := {0,1} Dual-System [SUMME]10 := {0,1, . . .,9} Dezimalsystem [Summe]16 := {0,1, . . .,9, A, B, . . ., F} Hexadezimalsystem Im grunde hast du also nichts neues erfunden :zwinker: [Edit: Hab nicht gelesen, das einzelne Glieder unterschiedlich groß sind, dann ist es natürlich kein adisches Zahlensystem mehr] Gruß Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz