| |
|
|
Sven Bader | Für el Übersetzung einiger C++ Codes después de XProfan ersetze Yo, el % Operator siempre por una MOD, allerdings con inesperado Ergebnissen. Entweder el Eingabewerte oder el Ergebnis voluntad en una Integer umgwandelt.
Das weicht de el Comportamiento de C++ y el Google Taschenrechner de, welcher auch Pagar con Dezimalstellen akzeptiert.
Ein Ejemplo: 5.5 MOD 2 son 1.5 also 2*2 Rest 1.5
In XProfan ergibt el gleiche Rechnung 1.0, como entweder el 5.5 a 5.0 umgewandelt se oder el Ergebnis de 1.5 en 1.0.
Hier una kleines Listing para nachvollziehen y uno Solución
Übersehe Yo algo en XProfan, hay una Einestellung oder una otro Operator oder es sólo el Hilfsfunktion? |
|
|
| |
|
|
|
H.Brill | Como en el Ayuda en MOD INTEGER como Parámetro angegeben son, greift como wohl (X)Profans interne automatische Typumwandlung. Das trifft wohl en el Eingabeparameter como auch el Ergebnis a.
Aber wozu braucht uno Float y MOD ? Yo brauche el höchstens, si yo z.B. 10él Stellen , gerade oder ungerade Pagar de una Pool rausfischen voluntad.
En
stimmt lo sí y lo kommt 0 fuera. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 24.02.2023 ▲ |
|
|
|
|
Sven Bader | Gracias para deine Antwort! Der Einsatz wäre doch ebenso berechtigt como Division con Floats. Man möchte wissen, como oft una Zahl en el otro passt oder eben wieviel danach todavía unverteilt übrig restos.
Den Ganzzahligen Divisionsrest nutze Yo en el Praxis schnelle Método algo sólo cada x-ten Schleifendurchgang a hacer.
Der aktuelle Einsatz es ser Spezialfall, es el Umwandlung de HSV en RGB Farben. Lo son como durchaus auch solche Características sin MOD pero la Code musste muy rápidamente trabajo, por qué Yo como Chiste breve en uno Def-Función brauchte.
Yo arbeite con Profano2Cpp y hay es, Yo eben otra vez nachgemessen habe una Proc en Faktor 350 langsamer como una Def, en XProfan 11 liegt el Faktor en 1,1. Das verleitet manchmal a ungewöhnlichen "Stunts".
A Lesbarkeit lasse Yo en el Regel todavía una Kommentar con el Original-Función en el Ver código fuente aber así sieht el Ergebnis entonces de
Def modu(2) (!(1) - !(2) * int(!(1) / !(2)))
def hsvToR(3) (if(((!(1) >= 60) AND (!(1) < 120)) O ((!(1) >= 240) AND (!(1) < 300)) , (!(3) * !(2)) * (1.0 - abs( modu(!(1) / 60.0,2) - 1.0)), if(((!(1) >= 120) AND (!(1) < 240)), 0.0 , !(3) * !(2))) + (!(3) - (!(3) * !(2))))
def hsvToG(3) (if(((!(1) >= 0) AND (!(1) < 60)) O ((!(1) >= 180) AND (!(1) < 240)) , (!(3) * !(2)) * (1.0 - abs(modu(!(1) / 60.0,2) - 1.0)), if(((!(1) >= 60) AND (!(1) < 180)), !(3) * !(2), 0.0)) + (!(3) - (!(3) * !(2))))
def hsvToB(3) (if((!(1) >= 0) AND (!(1) < 120), 0, if(((!(1) >= 180) AND (!(1) < 300)) , !(3) * !(2) , (!(3) * !(2)) * (1.0 - abs(modu(!(1) / 60.0, 2) - 1.0)))) + (!(3) - (!(3) * !(2))))
|
|
|
| |
|
|
|
H.Brill | Lo scheint wirklich así, daß MOD sólo el Integeranteil nimmt. Das scheint en C++, FreePascal usw. aber auch así a ser.
Tal vez puede ser aber auch con Inline - ASM qué hacer, si lo en Schnelligkeit va. Mit Conjunto("AsmMode", 1) puede ser se en efecto el Bytes zusammen suchen, en todos auch con otro Profanversionen mittels Bereichen a nutzen.
Como müßtest du veces Volkmar en Paules Foro fragen. Wäre sí interessant, como lo en efecto una Menge a FPU-Befehlen son, el Fließkomma-Arithmetik beherrschen.
Der sabe se en ASM para Versión X4 einigermaßen bien de. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 24.02.2023 ▲ |
|
|
|
|
H.Brill | Sven Bader (24.02.2023)
Yo arbeite con Profano2Cpp y hay es, Yo eben otra vez nachgemessen habe una Proc en Faktor 350 langsamer como una Def, en XProfan 11 liegt el Faktor en 1,1. Das verleitet manchmal a ungewöhnlichen "Stunts".
Der Faktor 350 liegt pero probablemente a Profano2Cpp selber. Laut RGH debería Procs mindestens genauso rápidamente abgearbeitet voluntad. A schnelleren Abarbeitung (C - Code) war en efecto Profano2Cpp pensamiento.
Sven Bader (24.02.2023)
Seit en XProfan auch mehrzeilige Características (con Proc) posible son (de Versión 7.6), debería esta vorgezogen voluntad. Sie voluntad mindestens genauso rápidamente abgearbeitet y son zudem en el Regel auch übersichtlicher y por lo tanto leichter a verstehen.
|
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 24.02.2023 ▲ |
|
|
|
|
Sven Bader | Usted hast bastante, Yo hatte para Profano Faktor 1,1 erwähnt. Also en Profano es una Proc gerade veces 10% langsamer, qué vollkommen ok es. Keine Idea, qué P2Cpp como macht, sicher así algo komplexes como globale Variables y Stukturen prüfen y el Función bereitstellen.
Profano2Cpp es sí siempre todavía más rápido, auch en Procs, en Summe haben wir sí meist ya una 4-stelligen Faktor en el Vergleich a Profano. Es en sólo siempre una wenig Jonglieren, como Yo, el Code lesbar y kompatibel a Profano halten möchte aber en el Zweifel una Speed-Optimierung más zugunsten de P2CPP entscheide.
Yo hatte de paso no en el Schirm, dass MOD en C++ como en Profano reagiert... eventuell war mi Codevorlage auch PHP oder JS basiert. |
|
|
| |
|
|
|
H.Brill | Wenn lo en Schnelligkeit ankommt, es eben ASM siempre todavía erste Wahl. Wenn Yo algo como brauche, Aprovecho También me gusta PureBasic. Das macht entonces reinen FASM-Output. Notfalls va auch una .DLL (Wrapper-DLL). Bloß darf Yo esta sólo para mi eigenen Zwecke nutzen y el DLL a otro Programmierer no weitergeben. Obwohl Yo lebenslanges Actualización habe, Yo letztes Jahr no geupdatet. Der Autor (Fred) es en una neues C-Backend umgeswitcht. Wahrscheinlich es leichter, neue Befehle / Características a implementieren. Puesto que hay lo en C determinado auch tonnenweise .libs, el cierto Funktionalitäten bereitstellen. So ähnlich se lo auch RGH con cierto Unidades gemacht haben. Man braucht sí no siempre el Rad neu a erfinden. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 24.02.2023 ▲ |
|
|
|
|
Sven Bader | Meistens passt el Speed, Defs son rápidamente genug y Procs son ok außer para Dinge, el muy oft aufgerufen voluntad. Manchmal reicht lo simplemente, una Bucle de außerhalb después de innerhalb des Proc a verlagern.
Zum Verständnis, qué "langsam" es: Der Proc-Aufruf dauert etwa una µs also 1/1.000.000 Sekunde o lo son etwa 1000 Proc-Aufrufe pro ms posible.
En una Spiel con 60fps Yo una Budget de etwa 16ms pro Frame y como Yo una CPU no voll auslasten möchte son 1.000 Proc-Aufrufe pro Frame also 1ms ya viel, es en efecto todavía algo en el Características drin, qué auch todavía ausgeführt voluntad möchte
Ein Def braucht en el Vergleich 0,002 µs o. 0.000002 ms o. 0.000000002 s
, alles Profano2CPP. Bisher war also todavía una Ensamblador nötig. |
|
|
| |
|
|
|
H.Brill | El Erfahrung, el Yo gemacht habe, son el internen Schleifen de XProfan. El son auch bedeutend más rápido como el eigenen con Mientras que oder Repeat programmierten. El MoveListProc es como muy interessant, gerade qué Arrays betrifft. Lo es sí cada frei, qué en el MoveListProc geschieht.
Hier veces una Test, wo todos 3 Möglichkeiten gemessen voluntad :
Declarar Largo a[], float a, e
Cls
Conjunto("Decimals", 2)
SetSize a[], 30000
Mat a[] < 1
Mat a[] + 1
MoveListProc
Parámetros cadena s, int i
If Get("MoveListMode") = 1
AddStrings(0, s)
Endif
ENDPROC
Proc Testproc
Parámetros Largo w
AddStrings(0, Str$(w))
ENDPROC
a = Val(DT("GetTime", 1, !NOW))
ClearList
Move("ArrToList", a[])
e = Val(DT("GetTime", 1, !NOW))
Imprimir "Zeit con Move : ", e - a, "Sekunden"
set("MoveListMode", 1)
a = Val(DT("GetTime", 1, !NOW))
ClearList
move("ArrToList", a[])
e = Val(DT("GetTime", 1, !NOW))
Imprimir "Zeit con MoveListProc : ", e - a, "Sekunden"
a = Val(DT("GetTime", 1, !NOW))
ClearList
WhileLoop 0, SizeOf(a[]) - 1
TestProc(a[&LOOP])
EndWhile
e = Val(DT("GetTime", 1, !NOW))
Imprimir "Zeit con Bucle + Proc : ", e - a, "Sekunden"
Imprimir "Taste para Beenden..."
WaitKey
Yo hoffe, Tengo el con el Sekunden correcto gemacht. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 24.02.2023 ▲ |
|
|
|
|
funkheld | En Purebasic es auch sin Wrapper como Procedure-Dll el es komplett frei para todos Zwecke. |
|
|
| |
|
|