Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Wow - cool! Danke. Und ich dachte: Das zählt jedes Mal. Ja, das ist logisch, das kann man schon bei der Kompilierung berechnen.
Also, etwa so:
Es wäre jedoch korrekter,DBL_MANT_DIG anstelle von 53 zu schreiben.
Fall des minimalen Gewinns, wenn alle Werte von double gebrochen sind.
1. Ihre Implementierung ist unvollständig, sie kann nur verwendet werden, wenn der Bereich der möglichen Werte im Voraus bekannt ist.
Hier ist der Code der vollständigen Implementierung
2. Selbst geschriebene Funktionen sind deutlich langsamer als eingebaute Funktionen, wenn sie zum Debuggen kompiliert werden und die Optimierungen deaktiviert sind.
1. Ihre Implementierung ist unvollständig und kann nur verwendet werden, wenn der Bereich der möglichen Werte im Voraus bekannt ist.
Hier ist der Code für die vollständige Implementierung
2. Selbst geschriebene Funktionen sind viel langsamer als eingebaute Funktionen, wenn sie für das Debugging kompiliert werden und die Optimierungen deaktiviert sind.
Vielen Dank, Ilyas, für den hervorragenden Code.
Natürlich ist es hier ein großer Helfer.
Ich studiere sie.
Ist das nicht das Gleiche?Nikolai, hallo. Ich sehe, dass Sie an Grafiken arbeiten, aber ich verstehe nicht ganz, was die eigentliche Aufgabe ist. Woran arbeiten Sie gerade?
Beschleunigung der Rendering-Funktionen?
Generell zum Thema des Threads: Ich habe es geschafft, einen völlig anderen Ansatz für das Zeichnen auf Leinwand zu implementieren. Ohne Verwendung der CCanvas-Klasse.
Das heißt, es geht nicht darum, einen separaten Satz von Funktionen zu ändern, sondern einen kompletten Zeichenmechanismus zu schaffen, der aus einem einzigen Block besteht.
(Natürlich kann ich das alles kaum im Code demonstrieren, da es eine Menge Code gibt und er nicht standardmäßig geschrieben ist, aber ich möchte es Ihnen allgemein sagen).
Also:
1. der Block (Funktion)
akzeptiert nur 2 Parameter - Kanvas und Element.
2. Jedem MT-Objekt wird eine eigene Ressource zugewiesen. Es wird sofort mit ResourceReadImage() in das "Pixel-Array" geladen; wenn die Ressource noch nicht existiert, wird ein Flag gesetzt, das anschließend den Bereich des Zyklus über den Kernel bestimmt.
3. Kernel, der ein Array von Eigenschaften aller Elemente ist. Sie enthält Daten über die Größe der Objekte und die Farben der verschiedenen Zustände. Und eine Menge anderer Daten. Für jedes Objekt gibt es insgesamt 235 Eigenschaften. Gleichzeitig kann jedes Element (je nach Typ) zwischen einem und 11 Objekten enthalten (es gibt keine Begrenzung).
4. Im Zeichnungsblock stellt jedes Objekt ein "Detail" der Zeichnung dar. Der Zyklus nach Objekt im Kernel ist also ein Zeichnungszyklus, in dem das Bild jedes Details erstellt wird. Wenn ein Canvas noch nicht erstellt wurde, wird ein vollständiger Zyklus nur für alle Details dieses Canvas durchgeführt. Die Zugehörigkeit zu den Kanvas ist im Kern vorgeschrieben, für jedes Detail. Das heißt, alle Kanvases (und Teile) haben ihre eigenen Sequenznummern. Durch diese Zahlen ist es möglich, den Inhalt nur der erforderlichen Kanvas zu zeichnen.
4. Wenn ein Kanvas bereits existiert und sein Bild in einem Array von Pixeln geladen ist und wir nur ein einziges Element neu zeichnen müssen (z. B. bei einem Farbwechselereignis), dann wird der Bereich der Kernschleife auf die Grenzen des einzelnen Elements eingegrenzt, dessen Nummer von der Zeichenfunktion ermittelt wurde.
Die Zeichnung selbst ist einfach. Es handelt sich um einen Zyklus durch die Zellen eines eindimensionalen Feldes von links nach rechts. Bevor der Zyklus eingestellt wird:
1. Die Ausgangszelle (Punkt A).
2. Die Endzelle (Punkt B).
3. Treten Sie vor.
Es ist schwer, die Funktionsweise eines Blocks von 1500 Codezeilen in einer Nussschale zusammenzufassen. Es handelt sich um eine Funktion, die seit 20 Monaten wächst und sich weiterentwickelt. Ich kenne sie fast auswendig, was es mir leicht macht, sie weiterzuentwickeln.
Durch die Verwendung des Kerns und des Fokus (indem wichtige Variablen in den globalen Bereich gesetzt werden) erhält der Block enorme Möglichkeiten. Ihre Grenzen sind für mich bis heute nicht erkennbar.
Das ist die Alternative zur Standard-Kanvas-Zeichnung.
zy. Wenn Sie an den Einzelheiten interessiert sind, kann ich Ihnen das erklären.
So sieht der Anfang des Blocks aus:
1. Ihre Implementierung ist unvollständig und kann nur verwendet werden, wenn der Bereich der möglichen Werte im Voraus bekannt ist.
Hier ist der Code für die vollständige Implementierung
Nochmals vielen Dank für den Code. Ich habe über diese Bit-Masken gerätselt wie über eine doppelte. Es stellt sich heraus, dass es nicht so einfach ist, wie ich vorher dachte.
Ich habe meine Version leicht an Ihre angepasst. Es gab nur einen Unterschied: Ihre Version ergab bei den Werten -1>x>0 Ceil(-0.1)= - 0.0, während meine Version 0.0 ergab. Ich weiß allerdings nicht, wann das nützlich sein könnte.
Und Sie erhalten Folgendes:
Das Gleiche, nur lesbar und mit Kommentaren:
Ich habe ein Skript geschrieben (im Anhang), das die 100%ige Identität mit Ihrer Version bestätigt.
Aber diese Variante ist schneller, kompakter und meiner Meinung nach auch besser lesbar.
Beachten Sie, dass im Funktionsrumpf keine einzige Variable erzeugt wird, während Ihre Version 4 8-Byte-Variablen erzeugt.
Vielleicht liege ich falsch?
Ergibt sich, wenn die Eingabe x immer einen gebrochenen Teil hat:
Ergebnisse, bei denen die Eingabe x einen gebrochenen Teil hat, sind selten:
2. Selbst geschriebene Funktionen sind deutlich langsamer als eingebaute Funktionen, wenn sie zum Debuggen kompiliert werden und die Optimierungen deaktiviert sind.
Es ist nicht klar, warum die Geschwindigkeit bei der Fehlersuche benötigt wird.
Aber wenn Sie es wirklich brauchen, können Sie das Konstrukt verwenden:
Und es gibt noch etwas, das ich nicht verstehe:
Warum ist die Dokumentation und die tatsächliche DBL_MANT_DIG = 53 ?
wie laut der gleichen Wikipedia= 52.
Und aus Ihrem Code geht hervor, dass auch 52 ?
Nikolai, hallo. Ich sehe, dass Sie an Grafiken arbeiten, aber ich verstehe nicht ganz, was die eigentliche Aufgabe ist. Woran arbeiten Sie gerade?
Beschleunigung der Rendering-Funktionen?
Hallo Piotr!
Ich werde persönlich antworten.
Und es gibt noch etwas, das ich nicht verstehe:
Warum ist die Dokumentation und die tatsächliche DBL_MANT_DIG = 53 ?
wobei laut der gleichen Wikipedia= 52.
Und es scheint, dass Ihr Code auch impliziert, dass es 52 ist?
Haben Sie selbst versucht, die Antwort auf diese Frage zu finden?
Tipp: Geben Sie in der Google-Suche "DBL_MANT_DIG 53 52" ein.