Fehler, Irrtümer, Fragen - Seite 2360

 
Aliaksandr Hryshyn:

Fehler für Entwickler.

Das Skript lässt sich nicht kompilieren, ermitteln Sie den Grund))). Verwenden Sie die angehängte Datei.


Dieselbe Datei:


Alle Kompilierungen, Fehlerzeile entfernen

 
Vladimir Pastushak:

Alles kompiliert, Zeile Error löschen

Begrenzung der Zeilenlänge im Editor

 
Fast528:

Begrenzung der Länge einer Zeile im Editor

Eine Zeichenkette wird nicht angezeigt, wenn sie länger als 4095 Zeichen ist.

 
fxsaber:

Bitte erklären Sie einem Dummkopf, warum das hier passiert?

Angenommen, wir können nur mit ungeraden Zahlen operieren, und wenn das Ergebnis einer arithmetischen Operation gerade wird, wird angenommen, dass es die nächste ungerade Zahl von oben ist, dann

(43 -  5) - 7  = (38)39 - 7  = (32)33
 43 - (5  + 7) = 43 - (12)13 = (30)31 

33 != 31

 
fxsaber:
Ich habe mehrere Stunden damit verbracht, nach Abweichungen zu suchen. Ich fand dies


Die Besonderheiten doppelt wissen, aber nicht so, dass wenn man die Reihenfolge der Addition ändert (außer bei den relativ sehr unterschiedlichen Zahlen), das Ergebnis anders ist! Bitte erklären Sie einem Dummkopf, warum das hier passiert?

Sie müssen sich nur die beiden untersten Zeilen des Quelltextes ansehen.

Wie Sie selbst zu sagen pflegen, ist der Agolithmus, der für die Genauigkeit der doppelten Rundung auf dieselbe Zahl an der Grenze der angegebenen Genauigkeit festgelegt ist, "krumm". Der Grund dafür ist natürlich, dass derselbe Wert, der durch verschiedene Methoden (Vertauschen von Multiplikatoren, Öffnen von Klammern usw.) in doppelter Darstellung erhalten wird, sich als unterschiedliche Zahlen herausstellen kann, die von verschiedenen Seiten maximal nahe an den gewünschten Wert herankommen. Runden Sie auf die nächste Ziffer auf, und entscheiden Sie dann, wie Sie mit der letzten Ziffer verfahren...

 
fxsaber:

Bei size+point wird die Mantisse überlaufen und anschließend gerundet/zurückgewiesen (abhängig vom fpu-Modus).

   float avg = 0.7;
   float size = 0.3;
   float point = 0.4;

   float r1 = avg - size - point;
   float r2 = avg - (size + point);
   cout << "r1 == r2 ? " << (r1 == r2) << '\n';

   cout << "-----avg-----\n";  prfl(avg);
   cout << "-----size-----\n"; prfl(size);
   cout << "-----point-----\n"; prfl(point);
   cout << "-----avg - size------\n"; prfl(avg - size);
   cout << "-----(avg - size) - point------\n"; prfl((avg - size) - point);
   cout << "-----size + point------\n"; prfl(size + point);
   cout << "-----avg - (size + point)------\n"; prfl(avg - (size + point));
r1 == r2 ? 0
-----avg-----
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
exponenta = -1
sign = 0
-----size-----
implicit_1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0
exponenta = -2
sign = 0
-----point-----
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1
exponenta = -2
sign = 0
-----avg - size------
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
exponenta = -2
sign = 0
-----(avg - size) - point------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -25
sign = 1
-----size + point------
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0
exponenta = -1
sign = 0
-----avg - (size + point)------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -24
sign = 1

Im Allgemeinen ist das Ergebnis von zwei Doubletten nur dann gleich, wenn sie auf die gleiche Weise erhalten werden (es sei denn, man zählt die Fälle, in denen es sich um ganze Zahlen handelt).

 
A100:
Ilya Malev:
pavlick_:

Danke für die Antworten, jede einzelne war wertvoll. Zum ersten Mal ist mir aufgefallen, dass das Hinzufügen der gleichen Artikel zum PREIS, aber in unterschiedlicher Reihenfolge, unterschiedliche PREISE erzeugt. Daraus ergeben sich unterschiedliche Ergebnisse im Tester.

Bei der Diskussion über Synchronisationen war es klar, wann und warum sie miteinander verglichen werden können. Aber das Preis-Plus und die unterschiedliche Leistung haben sich erstmals so deutlich auf das TK-Ergebnis ausgewirkt.


Um diese Unklarheiten zu vermeiden, müssen wir dem berechneten Preis einen Besan weniger als einen halben Punkt hinzufügen und dann normalisieren.

 
fxsaber:

Um diese Unklarheiten zu vermeiden, müssen wir zu dem errechneten Preis lediglich einen Bruchteil von weniger als einem halben Punkt hinzufügen und dann normalisieren.

Und es gibt auch die Meinung, dass man, wenn sich die Ergebnisse der TK durch solche unbedeutenden Dinge stark verändern, "Danke" sagen und die TK in den Müll werfen sollte.

 
fxsaber:

Danke für die Antworten, jede einzelne war wertvoll. Zum ersten Mal ist mir aufgefallen, dass das Hinzufügen der gleichen Artikel zu einem PREIS, aber in einer anderen Reihenfolge, unterschiedliche PREISE erzeugt. Daraus ergeben sich unterschiedliche Ergebnisse im Tester.

Bei der Diskussion über Synchronisationen war es klar, wann und warum sie miteinander verglichen werden können. Aber das Preis-Plus und die unterschiedliche Leistung haben sich erstmals so deutlich auf das TK-Ergebnis ausgewirkt.


Um diese Unklarheiten zu vermeiden, müssen wir dem berechneten Preis einen Besan weniger als einen halben Punkt hinzufügen und dann normalisieren.

Vielleicht lohnt es sich, die Funktionen abzubilden?

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Ilya Malev:

Und es gibt auch die Meinung, dass man, wenn sich die Ergebnisse einer TK durch solche Kleinigkeiten stark verändern, "Danke" sagen und eine solche TK in den Papierkorb werfen sollte.

Sie ändern sich nicht viel, sie ändern sich einfach. Das ist genug, um eine Untersuchung einzuleiten.