Seite 5 von 5

Verfasst: 11.07.2005 19:07
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~.~?

Verfasst: 11.07.2005 19:10
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.

Verfasst: 11.07.2005 19:32
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

Verfasst: 11.07.2005 19:33
von ts-soft
Ich denke mal hier im Anfänger-Forum wird es wohl von fast jedem gebraucht :D

Verfasst: 11.07.2005 21:50
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).

Verfasst: 16.07.2005 11:20
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 :( .....

Verfasst: 16.07.2005 13:32
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:

Verfasst: 16.07.2005 15:51
von Andre
Deeem2031 hat geschrieben:So, Fred hats sich es jetzt endlich angeguckt :)
Und, was sagt er dazu? :wink:

Verfasst: 16.07.2005 15:53
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...

Verfasst: 16.07.2005 15:57
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.