Sonstiges > Offtopic

klitzekleinesmathematisches algorithmisches Problem

<< < (8/8)

Marinero Atlántico:
Ich will das User-initialisiert machen.
D.h. sobald eine Order reingestellt wird, wird geschaut, ob es Offers zu einem niedrigeren/gleich großen Preis gibt, wenn ja, gibt es einen Tausch Geld gegen Aktien.
Muß man natürlich aufpassen bei gleichzeitig eintreffenden Orders, da diese mutlithreaded in das System gehen und ich mir bei einigen Punkten bei konkurrierenden Zugriff auf RDBMS nicht so ganz sicher bin. Der Applikationsserver managed die Threads, aber meine Klassen werden von mehreren Threads gleichzeitig angesprochen.
Ich hab momentan die Theorie, dass als einziges SQL Standard RDBMS Locking Mechanismus (Repeatable Read und so) Serialized hilft. Das ist aber zu schlecht für die Performance, da das heftigste --> 1 ganze Tabelle ist nur für eine (User-) Transaktion gleichzeitig zugänglich.
Es gibt da aber noch so "RDBMS Zugriffs Pattern" (Name von mir) wie Pessimistic und Optimistic Locking. Ich glaub das Pessimistic Locking mir hier helfen wird. Das wird auch direkt von Hibernate unterstützt. In meinem DB Schema muss deshalb noch eine version (long) Spalte rein.
Dies ist der komplexeste Teil der gesamten Anwendung.
Clustering Mechanismen und Versionskontrollsysteme haben mit genau den selben Kräften zu kämpfen.
Ansonsten kann man zur Not auch zeitgesteuerte Klassen einbauen, die jede Minute den Markt räumen (d.h. Angebote und Nachfragen die sich treffen umsetzen). Dafür gibt es in JBoss eigene Mechanismen (geh ich von aus) oder ich benutze das Quartz Projekt (haben wir schon oft in der Firma benutzt).
Triggers ist ja mehr ein RDBMS Mechanismus als Java.

Gruß Axel

Don Pasquale:
He Ihr Beiden, das ist mein Fred !

Für mich sieht das allerdings ziemlich nach Zufall aus:

Spieler A bietet für 100 Aktien je 35 €
Spieler B bietet für 100 Aktien je 34 €

Spieler C will für 100 Aktien je 34 €

Warum bekommt dann Spieler B den Zuschlag ?


Ciao
Don Pasquale

Don Pasquale:
So, ich will dann mal meine Lösung posten :

public static void main(String[] args) {
 double startkurs = 30.0;
 double faktor = 0.0125;
 double kapital = 10000.0;
 double menge = 0;
 double kurs_neu = 30 , kurs_alt = 30;
 double zwischenstand;
 double diff = 1.1;
  kurs_alt = startkurs;
  kurs_neu = 30.0;
  int i = 0;
   while ( diff > 0.00000001 ){
   menge = kapital / kurs_alt;
   kurs_alt = kurs_neu;
   kurs_neu = menge * faktor + startkurs;
   menge = kapital / kurs_neu ;
   diff = Math.abs(kurs_neu - kurs_alt);
   kurs_alt = kurs_neu;
     }
    System.out.print("\nKapital: " + kapital);
    System.out.print("\nKurs   : " + kurs_neu);
    System.out.print("\nMenge  : " + menge);
}

Das kann man noch in eine Funktion packen,
aber dann sollte, ausgehend von einem
beliebigen Startkurs und einer beliebigen Nachfragesumme
positiv oder negativ der neue Kurs, bzw. die
Kaufmenge bestimmbar sein.



Ciao
Don Pasquale

Marinero Atlántico:

--- Zitat von: Don Pasquale am 28.02.05 - 08:13:19 ---Das kann man noch in eine Funktion packen,

--- Ende Zitat ---
::)
Nicht hauen und nicht persönlich gemeint, aber das ist
a) überhaupt nicht objektorientiert
b) ist die Rechnung mit double ungenau (besser: java.math.BigDecimal)
c) ist System.out.println extrem uncool. Besser: Log4j oder jdk1.4 logging.
d) Vermischung von Testdaten mit Anwendungsalgorythmen (dafür gibt es junit Tests)

Axel

Don Pasquale:

--- Zitat von: Marinero Atlántico am 28.02.05 - 08:44:10 ---
--- Zitat von: Don Pasquale am 28.02.05 - 08:13:19 ---Das kann man noch in eine Funktion packen,

--- Ende Zitat ---
::)
Nicht hauen und nicht persönlich gemeint, aber das ist
a) überhaupt nicht objektorientiert
b) ist die Rechnung mit double ungenau (besser: java.math.BigDecimal)
c) ist System.out.println extrem uncool. Besser: Log4j oder jdk1.4 logging.
d) Vermischung von Testdaten mit Anwendungsalgorythmen (dafür gibt es junit Tests)

Axel

--- Ende Zitat ---

Einwand a) Objekt ? orientiert ? Reicht nicht auch eine Funktion ?
Einwand b) korrekt, aber mir würden sogar nur die ersten beiden stellen reichen. Genauigkeit um Ihrer selbst willen ist käse.
Einwand c) ich benötige überhaupt keine ausgabe, sondern
lediglich einen rückgabewert
Einwand d) So kann aber jeder hier im Forum meine Lösung mit dreck und dropp nachvollziehen.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln