| |
|
|
Sven Bader | Pour qui Übersetzung einiger C++ Codes pour XProfan ersetze Je l' % Operator toujours par un MOD, allerdings avec inattendu Ergebnissen. Entweder qui Eingabewerte ou bien cela Ergebnis volonté dans un Integer umgwandelt.
cela weicht de dem Comportement des C++ et dem Google calculette ab, quel aussi payons avec Dezimalstellen akzeptiert.
un Beispiel: 5.5 MOD 2 sommes 1.5 alors 2*2 reste 1.5
dans XProfan ergibt qui gleiche la facture 1.0, là entweder qui 5.5 zur 5.0 umgewandelt wird ou bien cela Ergebnis de 1.5 sur 1.0.
ici un kleines Listing zum nachvollziehen et einer Solution
Übersehe je quelque chose dans XProfan, gibt es une Einestellung ou bien une anderen Operator ou bien ca va seulement avec qui Hilfsfunktion? |
|
|
| |
|
|
|
H.Brill | là dans qui Aider chez MOD INTEGER comme paramètre angegeben sommes, greift là wohl (X)Profans interne automatische Typumwandlung. cela trifft wohl sur qui Eingabeparameter comme aussi sur cela Ergebnis trop.
mais wozu braucht on Float et MOD ? il me faut cela au maximum, si je z.B. 10il se mettre , justement ou bien ungerade payons aus einem Pool rausfischen veux.
chez
stimmt es et alors es venez 0 raus. |
|
|
| 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 | merci pour deine Antwort! qui Einsatz wäre doch ebenso berechtigt comment qui Division avec Floats. on voudrais savons, comment souvent une numéro dans l'autre passt ou bien plan combien après encore unverteilt übrig bleibt.
Den Ganzzahligen Divisionsrest nutze je dans qui Praxis schnelle Methode quelque chose seulement jeden x-ten Schleifendurchgang trop faire.
qui aktuelle Einsatz ist son Spezialfall, c'est qui Umwandlung de HSV dans RGB Farben. il y a là durchaus aussi solche Funktionen sans MOD mais qui Code musste très vite travailler, weshalb je es comme Einzeiler dans einer Def-Funktion brauchte.
je travaille avec Profan2Cpp et là ist, comment je plan nochmal nachgemessen habe un Proc um facteur 350 langsamer comme un Def, dans XProfan 11 liegt qui facteur chez 1,1. cela verleitet quelquefois trop ungewöhnlichen "Stunts".
Zur Lesbarkeit lasse je dans qui règle encore une Kommentar avec qui Original-Funktion im Voir le texte source mais so sieht cela Ergebnis ensuite aus
Def modu(2) (!(1) - !(2) * int(!(1) / !(2)))
def hsvToR(3) (si(((!(1) >= 60) AND (!(1) < 120)) OU ((!(1) >= 240) AND (!(1) < 300)) , (!(3) * !(2)) * (1.0 - abs( modu(!(1) / 60.0,2) - 1.0)), si(((!(1) >= 120) AND (!(1) < 240)), 0.0 , !(3) * !(2))) + (!(3) - (!(3) * !(2))))
def hsvToG(3) (si(((!(1) >= 0) AND (!(1) < 60)) OU ((!(1) >= 180) AND (!(1) < 240)) , (!(3) * !(2)) * (1.0 - abs(modu(!(1) / 60.0,2) - 1.0)), si(((!(1) >= 60) AND (!(1) < 180)), !(3) * !(2), 0.0)) + (!(3) - (!(3) * !(2))))
def hsvToB(3) (si((!(1) >= 0) AND (!(1) < 120), 0, si(((!(1) >= 180) AND (!(1) < 300)) , !(3) * !(2) , (!(3) * !(2)) * (1.0 - abs(modu(!(1) / 60.0, 2) - 1.0)))) + (!(3) - (!(3) * !(2))))
|
|
|
| |
|
|
|
H.Brill | Es scheint wirklich so, qui MOD seulement den Integeranteil nimmt. cela scheint dans C++, Free Pascal usw. mais aussi so trop son.
peut-être peux on mais aussi avec Inline - ASM quoi faire, si es um Schnelligkeit allez. avec Set("AsmMode", 1) peux on sich oui aussi qui Bytes zusammen chercher, um cela ganze aussi avec anderen Profanversionen mittels Bereichen trop nutzen.
là müßtest du la fois Volkmar dans Paules Forum fragen. Wäre oui intéressant, là es oui aussi une la quantité à FPU-Befehlen gibt, qui Fließkomma-Arithmetik beherrschen.
qui kennt sich dans ASM pour Version X4 einigermaßen bien aus. |
|
|
| 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)
je travaille avec Profan2Cpp et là ist, comment je plan nochmal nachgemessen habe un Proc um facteur 350 langsamer comme un Def, dans XProfan 11 liegt qui facteur chez 1,1. cela verleitet quelquefois trop ungewöhnlichen "Stunts".
qui facteur 350 liegt mais wohl à Profan2Cpp selber. le son RGH devrait Procs mindestens genauso vite abgearbeitet volonté. Zur schnelleren Abarbeitung (C - Code) était oui aussi Profan2Cpp gedacht.
Sven Bader (24.02.2023)
depuis dans XProfan aussi mehrzeilige Funktionen (avec Proc) possible sommes (ab Version 7.6), devrait cet vorgezogen volonté. vous volonté mindestens genauso vite abgearbeitet et sommes zudem dans qui règle aussi übersichtlicher et daher leichter trop comprendre.
|
|
|
| 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 | tu as droite, je hatte pour Profan facteur 1,1 erwähnt. alors dans Profan est un Proc justement la fois 10% langsamer, quoi vollkommen ok ist. je n'en sais rien, quoi P2Cpp là pouvoir, sûrement so quelque chose komplexes comment globale Variablen et Stukturen vérifier et dans qui Funktion bereitstellen.
Profan2Cpp ist oui toujours plus rapide, aussi chez Procs, dans somme avons wir oui meist déjà une 4-stelligen facteur im comparaison trop Profan. c'est chez seulement toujours un peu jongler, là Je l' Code lesbar et kompatibel trop Profan tenir voudrais mais im Zweifel une Speed-Optimierung plutôt zugunsten de P2CPP entscheide.
je hatte incidemment pas sur dem Schirm, dass MOD dans C++ comment dans Profan reagiert... eventuell était mon Codevorlage aussi PHP ou bien JS basé. |
|
|
| |
|
|
|
H.Brill | si es sur Schnelligkeit ankommt, ist plan ASM toujours erste l'élection. si je quelque chose comme brauche, nehme je aussi volontiers PureBasic. cela fait ensuite reinen FASM-Output. Notfalls allez aussi une .DLL (Wrapper-DLL). Bloß darf je cet seulement pour mon eigenen Zwecke nutzen et qui DLL à autre Programmierer pas weitergeben. quoique je lebenslanges Update habe, habe je l'année dernière pas geupdatet. qui Autor (Fred) ist sur un nouveau C-Backend umgeswitcht. Wahrscheinlich ist es leichter, neue Befehle / Funktionen trop implementieren. là gibt es dans C bestimmt aussi tonnenweise .libs, qui bestimmte Funktionalitäten bereitstellen. So ähnlich wird es aussi RGH avec certain Unités gemacht avons. on braucht oui pas toujours cela roue récente trop 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 | la plus part du temps passt qui Speed, Defs sommes vite genug et Procs sommes ok sauf pour Dinge, qui très souvent aufgerufen volonté. quelquefois reicht es simple, une Boucle de außerhalb pour dedans des Proc trop verlagern.
Zum Verständnis, quoi "langsam" ist: qui Proc-Aufruf dauert etwa une µs alors 1/1.000.000 seconde bzw il y a etwa 1000 Proc-Aufrufe pro ms possible.
chez einem Spiel avec 60fps habe je un Budget de etwa 16ms pro Frame et là je une CPU pas voll auslasten voudrais sommes 1.000 Proc-Aufrufe pro Frame alors 1ms déjà viel, c'est oui aussi et avec ca dans den Funktionen drin, quoi aussi encore fonctionnement volonté voudrais
un Def braucht im comparaison 0,002 µs bzw. 0.000002 ms bzw. 0.000000002 s
, alles Profan2CPP. Bisher était alors encore un Assembler nötig. |
|
|
| |
|
|
|
H.Brill | qui Erfahrung, qui je gemacht habe, sommes qui internen Schleifen de XProfan. qui sommes aussi important plus rapide comme qui eigenen avec Tandis que ou bien Repeat programmierten. qui MoveListProc ist là très intéressant, justement quoi Arrays betrifft. Es steht oui chaque libre, quoi dans qui MoveListProc geschieht.
ici la fois un Test, wohin alle 3 Opportunités gemessen volonté :
Déclarer Long a[], float a, e
Cls
Set("Décimal", 2)
SetSize a[], 30000
Mat a[] < 1
Mat a[] + 1
MoveListProc
Paramètres string s, int i
Si Get("MoveListMode") = 1
AddStrings(0, s)
Endif
ENDPROC
Proc Testproc
Paramètres Long w
AddStrings(0, Str$(w))
ENDPROC
a = Val(DT("GetTime", 1, !NOW))
ClearList
Move("ArrToList", a[])
e = Val(DT("GetTime", 1, !NOW))
Imprimer "Zeit avec Move : ", e - a, "Sekunden"
set("MoveListMode", 1)
a = Val(DT("GetTime", 1, !NOW))
ClearList
déplacer("ArrToList", a[])
e = Val(DT("GetTime", 1, !NOW))
Imprimer "Zeit avec 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))
Imprimer "Zeit avec Boucle + Proc : ", e - a, "Sekunden"
Imprimer "Taste zum finissons..."
WaitKey
je hoffe, j'ai cela avec den Sekunden richtig 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 | chez Purebasic ca va aussi sans Wrapper comme Procedure-Dll qui ist komplett libre pour alle Zwecke. |
|
|
| |
|
|