Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigenes Zahlensystem -> Performance (https://www.delphipraxis.net/69467-eigenes-zahlensystem-performance.html)

Meflin 15. Mai 2006 17:39


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:
0.0.0.0
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:
Delphi-Quellcode:
3.36.5.78
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.

ein Zahlenbereich mit dem Teilmaximalwert von 30 und 6 Gliedern ginge also von
Delphi-Quellcode:
0.0.0.0.0.0
bis
Delphi-Quellcode:
30.30.30.30.30.30
und würde 427.518.000 verschiedene "Zahlen" beinhalten.

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 :)


Flo85 15. Mai 2006 18:04

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

Flare 15. Mai 2006 18:39

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:
milli := milli + 1
if milli>1000 then
begin
  milli := 0;
  sek := sek + 1;
  if sek>60 then
  begin
    sek := 0;
    min := min + 1;
...
Nur weiß ich nicht ob es effizienter ist.


Flare

Frickeldrecktuxer_TM 15. Mai 2006 18:54

Re: Eigenes Zahlensystem -> Performance
 
Zitat:

Zitat von Meflin
1. Gibt es sowas eigentlich und wenn ja, wie tauft es sich

Ich würde es als "ziemlich krank" bezeichnen, vielleicht gibt es das unter diesem Namen schon.

Zitat:

Zitat von Meflin
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.

Sowas implementiert sich am performantesten in Hardware. In Software würde ich iterativ addieren, solange es einen Übertrag gibt (Pseudocode):
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;
}

Flare 15. Mai 2006 19:09

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

Nicolai1234 15. Mai 2006 19:14

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?

Meflin 15. Mai 2006 19:25

Re: Eigenes Zahlensystem -> Performance
 
Zitat:

Zitat von Nicolai1605
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?

Naja, das System ist auch nicht wirklich zum rechnen gedacht, es erfüllt schon seinen Zweck - und zwar verdammt gut. hoffe ich zumindest :mrgreen: aber darum soll es hier ja auch nicht wirklich gehen

Zitat:

Zitat von Flare
Was mir gerade eben einfällt. Dieses "Zahlensystem" ist doch garantiert nur für irgendeine Anzeige gedacht, oder sehe ich das falsch?

Das siehst du nicht ganz falsch, aber einfaches "rechnen" mit integern hilft mir nicht wirklich weiter.

@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:


tigerman33 16. Mai 2006 08:05

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.

Chris1986 16. Mai 2006 09:26

Re: Eigenes Zahlensystem -> Performance
 
Zitat:

Zitat von Meflin
1. Gibt es sowas eigentlich und wenn ja, wie tauft es sich

Ja, sowas gibt es schon. Das nett sich b-adisches Zahlensystem. Nur die Punkte sind neu, die lässt man meistens weg. Das funktioniert bei dir allerdings nicht, weil man dann die Stellen nicht mehr unterschieden kann :stupid:

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:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz