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

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

Verfasst: 16.07.2005 15:51
von Andre
Deeem2031 hat geschrieben:So, Fred hats sich es jetzt endlich angeguckt

Und, was sagt er dazu?

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.