Wie Arbeitet CompareMemory() ??

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Stimmt, aber PB macht sowas ja normalerweise nicht, sollte also für alle
reichen, die nicht mit ASM rumhantieren :)

Deeem: willst du nichts ankündigen~.~?
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

remi_meier hat geschrieben:Stimmt, aber PB macht sowas ja normalerweise nicht, sollte also für alle
reichen, die nicht mit ASM rumhantieren :)
Ja, ok. Sehe ich auch nicht wirklich als Bug, weil es sowieso meist egal ist und der sichere Weg viel zu langsam wäre.
remi_meier hat geschrieben:Deeem: willst du nichts ankündigen~.~?
Meinst du das RoundL in meiner Lib buggy war? Ok, also wer die Lib hat sollte die jetzt nochmal laden, weil RoundL ein kleinen Fehler hatte.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Mir ist da eine Idee gekommen das auszunutzen, auch wenn es vielleicht keiner braucht ;)

Code: Alles auswählen

Enumeration
  #RoundMode_Nearest
  #RoundMode_Down
  #RoundMode_Up
  #RoundMode_Truncate
EndEnumeration

Procedure SetRoundMode(Mode)
  Select Mode
    Case #RoundMode_Nearest
      !FNSTCW WORD[Esp-2]
      !MOV AX,WORD[Esp-2]
      !MOV dx, AX
      !AND DH, 12
      !XOR AH, DH
      !MOV WORD[Esp-2],AX
      !FLDCW WORD[Esp-2]
    Case #RoundMode_Down
      !FNSTCW WORD[Esp-2]
      !MOV AX,WORD[Esp-2]
      !MOV dx, AX
      !AND DH, 8
      !XOR AH, DH
      !OR  AH, 4
      !MOV WORD[Esp-2],AX
      !FLDCW WORD[Esp-2]
    Case #RoundMode_Up
      !FNSTCW WORD[Esp-2]
      !MOV AX,WORD[Esp-2]
      !MOV dx, AX
      !AND DH, 4
      !XOR AH, DH
      !OR  AH, 8
      !MOV WORD[Esp-2],AX
      !FLDCW WORD[Esp-2]
    Case #RoundMode_Truncate
      !FNSTCW WORD[Esp-2]
      !MOV AX,WORD[Esp-2]
      !OR AH, 12
      !MOV WORD[Esp-2],AX
      !FLDCW WORD[Esp-2]
  EndSelect
EndProcedure

f.f = 4.4
f2.f = 4.6
f3.f = -4.6

SetRoundMode(#RoundMode_Nearest)
x.l = f
Debug x
x.l = f2
Debug x
x.l = f3
Debug x
SetRoundMode(#RoundMode_Down)
x.l = f
Debug x
x.l = f2
Debug x
x.l = f3
Debug x
SetRoundMode(#RoundMode_Up)
x.l = f
Debug x
x.l = f2
Debug x
x.l = f3
Debug x
SetRoundMode(#RoundMode_Truncate)
x.l = f
Debug x
x.l = f2
Debug x
x.l = f3
Debug x
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ich denke mal hier im Anfänger-Forum wird es wohl von fast jedem gebraucht :D
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Explizites Runden ist per Funktionsaufruf, eben der Explizite Aufruf einer Funktion zum Runden. Gecastet ist eine Variable, wenn sie in einen anderen Typ gewandelt wird. Demnach ist "long = float" eine gecastete Rundung. (So nenne ich das zumindest. Wobei es den Begriff casten im Programmieren wirklich in dieser Verwendung gibt. Und explizit kann man ja in vielerlei Hinsicht einsetzen).
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

@Deeem2031
Habe mir die Libs gesaugt und freue mich über schnelles Pure-B..
Danke :allright:

@ All
Pure Basic macht mit Handoptimierten Code Werbung....
Da PB Inline ASM unterstützt, dachte ich das zumindest der PB-Kern in Handgeschriebenen (Optimiertem) ASM ist!?
Nun bin ich mal wieder etwas :( .....
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Teilweise ist PB auch in Asm geschrieben, die ganzen SYS_ Proceduren (die "wirklich" internen ;) ) sind alle ASM-geschrieben. Also auch handoptimiert, aber es gibt halt noch Tricks wie man das ganze noch schneller machen kann - die ich aber auch nicht alle beherrsche, da sind also bestimmt immernoch Verbesserungsmöglichkeiten.
Manche Libs (z.B. LinkedList) sind auch in Assembler geschrieben und auch die C-Libs sind zwar langsamer, aber das HauptProblem bei der Memory-Lib lag bei den API-Aufrufen. Manche der PB-Procs haben einfach nur eine API-Procedure aufgerufen und das Ergebnis weitergeleitet. Das ist dann natürlich erst recht langsam ;)

Naja, wird schon :wink:
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Deeem2031 hat geschrieben:So, Fred hats sich es jetzt endlich angeguckt :)
Und, was sagt er dazu? :wink:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Soweit ich weiß hat er erstmal wichtigeres zu tun als diese Libs einzubauen. Das meine ich hier irgendwo im Forum nachgelesen zu haben...
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

"it sounds interesting :) [...] thank you, i will read all that" und dann noch "for now i'm trying to finish things which needs to be done"

Kann also sein das es mit der nächsten PB-Version schnellere Libs gibt - vielleicht aber auch nicht.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten