Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 11:06

Foren-Übersicht » Sonstiges » Meinungen zu den Projekten
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 197 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7, 8 ... 14  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 13, 2005 21:53 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Assembler in Delphi geht so:
Code:
  1. function randex(range: integer): integer;
  2. var
  3.   randseed: integer;
  4. asm
  5.   MOV EAX, 11035152455
  6.   MUL DWORD PTR randseed
  7.   ADD EAX, 12345
  8.   MOV DWORD PTR randseed, EAX
  9.   MUL ECX
  10.   XCHG EDX, EAX
  11. end;

Code:
  1. int _fastcall randex(int range)
  2. {
  3.    static int randseed;
  4.  
  5.    _asm {   mov eax, 1103515245
  6.          mul DWORD PTR randseed
  7.          add   eax, 12345
  8.          mov DWORD PTR randseed, eax
  9.          mul ecx
  10.          xchg edx, eax }
  11. }


P.S.: Übernehme keine Garantie, dass der Code funktioniert... ;) Was noch fehlt, ist das Zuweisen von result... Aber die Assembler-Leute hier sollten das auch gebacken kriegen ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 14, 2005 18:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 12:26
Beiträge: 53
Wohnort: Dornbirn
Frase die Variable randseed sollte static sein (sich den Wert merken, den sie das letzte mal hatte), sonst kommen immer die gleichen Zahlen raus... z.B. bein randex(10) immer 3 (Nur ne Hausnummer).

Die funktion randex ist bei mir schon lange im Einsatz, weil die rand Funktion in C++ ist langsam und umständlich zu bedienen

_________________
Good software is like sex, it's best when it's free


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 10:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 12:26
Beiträge: 53
Wohnort: Dornbirn
Und der return Wert is im EAX Register.

Durch den aufruf des _fastcalls wird genau dieser zurückgegeben (also braucht es kein return). Ich weiß aber wirklich net wie man das in Delphi macht. hat jemand ne Ahnung?

Oder sonst einfach randseed returnen, mcht das gleiche

_________________
Good software is like sex, it's best when it's free


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 11:02 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
Frase die Variable randseed sollte static sein (sich den Wert merken, den sie das letzte mal hatte)

In Delphi sieht es, glaube ich, so aus :
Code:
  1.  
  2. {$J+}
  3. const VarName : Integer = VarValue;
  4. {$J-}
  5. begin
  6.  VarName := ....
  7. end;
  8.  

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 17:00 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
assembler isn gutes stichwort nebenbei -
gibts irgend nen tutorial wo man die grundlegenden dinge lernen kann? (simple operationen wie + - * / oder das zuweisen von variablen, schleifen etc etc.)
die ganzen sachen häufen sich nämlich so das ich langsam was schnelleres als standart delphi gebrauchen könnte

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 21:37 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Addieren geht mit ADD ;)

Hab hier irgendwo auf der Platte ein Assembler-Tutorial rumliegen, aber da wird "nur" ein ganzes Programm in Assembler beschrieben und nicht, wie man den Inline-Assembler von Delphi bedient. Auserdem ist das Tutorial ziemlich dürftig in Sachen Erklärungen...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 22, 2005 15:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hier war doch vor einiger Zeit jemand im Forum unterwegs und wollte ein Ausführliches Assembler Werk verfassen. Such mal im Forum nach ... öhm Assebler!? oder EDX oder so. Eventuell findest du den Artikel wieder.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 22, 2005 16:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
viewtopic.php?t=3590

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 05, 2005 20:08 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Wenn wir schon grade bei Assembler und Geschwindigkeit sind:
Warum eigentlich sind Multiplikationen so viel schneller als Divisionen? Und kann man dem Delphi Compiler irgendwie beibringen, wenn möglich eine Division in eine äquivalente Multiplikation umzuwandeln?

P.S.: Die Partikelengine schaut wirklich sehr hübsch aus... Und die ist so verdammt schnell...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 06, 2005 03:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
@Frase:

Ähm... um aus einer Multiplikation eine Division zu machen müsste mann doch dividieren, um den Multiplikationsfaktor zu bekommen oder :-) ???

oder meinste nur bei Rechnungen die im Quelltext als "Variable durch Konbstante" stehen???

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 06, 2005 06:19 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
delphi übernimmt das verlässlich automatisch, wenn man versucht, konstate elemente nach links in einem Ausdruck zu bekommen oder ggf. zu klammern. dann vermeidet er wo möglich (leerzeichen richtig gesetzt!) divisionen und macht multiplikationen daraus. früher existierte mal eine schöne seite (optimalcode oder so) zu dem thema, aber die ist leider irgendwann vom netz gegangen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 06, 2005 20:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 12:26
Beiträge: 53
Wohnort: Dornbirn
Soweit ich weiß machen halbwegs gute compiler schon nen guten Code. Z.B. machen sie bei einer Division durch 2 oder Multplikation mit 0.5 ein Shift left, etc...
Aber wenn durch eine Variale dividiert wird kann er keine Multiplikation drauß machen, da müsste wie Geo bereits meinte sowieso ein Division durchgeführt werden.

Aber sooooooo langsam ist eine Division auch wieder nicht, dass man sich darum sorgen müsste. Hey heutige PC's haben bis zu 3,2 GHZ 3.200.000.000 Rechenoperationen pro Sekunde.... Um das auszuschöpfen kann man oft und viel dividieren :)

_________________
Good software is like sex, it's best when it's free


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 06, 2005 20:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Habe mal gelesen, dass Delphi Divisionen durch Konstanten bestehen läßt, um Ungenauigkeiten bei der Gleitkommaberechnung vorzubeugen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 16:50 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Naja, was ich meinte ist, dass z.B. bei der Aufgabe

c := 5 / 2;

doch auch

c := 5 * 0.5;

stehen könnte. Das bringt einen nicht zu verachtenden Geschwindigkeitszuwachs...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 18:48 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
würde spontan sagen das ist nur bei konstanten möglich.

wenn du variablen hast müsste das ja so aussehn:

Code:
  1.  
  2. // anstatt
  3. a := a / b;
  4. // das hier
  5. a := a * (1/b);


dann hast du ne division und ne multiplikation, also nicht wirklich eine optimierung ^^
ich weiß nicht, ob es compiler mit solchen funktionen gibt, aber ich könnte mir vorstellen
das das trotz allem ähnlich langsamer wird dadurch.
da geb ich aber keine garantie drauf

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 197 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7, 8 ... 14  Nächste
Foren-Übersicht » Sonstiges » Meinungen zu den Projekten


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]