Wünsche für MT5 - Seite 46

 
-Alexey-:
Ich bin nicht einverstanden, es gibt ein Problem, hier ist ein Beispiel (Gitter 10000x10000):

double x1=0,0011;

double y1=x1/10000;

double x2=0,0012;
double y2=x2/10000;

double c=y1-y2;
double d=MathPow(c,2);


printf(string(d));

результат: 9.999999999999968e-017

Wie gehe ich mit diesem Ergebnis um? Wie kann ich sie mit anderen Ergebnissen vergleichen? DBL_EPSILON=2.2204460492503131e-016. Abgesehen von den letzten beiden Ziffern - sehen Sie? Und das sind nur zwei Operationen. Und ich habe noch mehr von diesen Operationen. Auf der Grundlage dieser Informationen müssen Sie die Daten später mit einigen weiteren Operationen wiederherstellen. Mehr Verluste. Ich lerne gerade, in einer C-ähnlichen Sprache zu programmieren, und es fällt mir schwer, eine solche Klasse zu erstellen (oder besser gesagt, ich habe keine Ahnung, wie). Dies ist ein ernsthaftes Werk. Übrigens, haben Sie zufällig einen solchen Kurs? Und die Entwickler können die Dinge für alle auf einmal verbessern. Es wäre möglich, 100.000x100.000 Raster zu erstellen. Es stünden bereits mehr oder weniger repräsentative Stichproben zur Verfügung, obwohl selbst dies im Großen und Ganzen nicht ausreicht. Und wenn es eine Klasse für beliebige Genauigkeit gäbe, wäre es noch besser :) Es ist nur ein Datentyp. Wenn es etwas gibt, dann hat es einen Grund, denn es erfüllt ein Bedürfnis. Der Punkt ist, dass ich nicht weiß, ob es für Entwickler schwierig ist oder nicht. Wenn es schwierig und teuer ist - da stimme ich Ihnen zu - warum sollte ich mein Problem auf sie abwälzen. Aber wenn es nicht schwierig ist - warum nicht? Auch hier - eine leistungsstarke Entwicklungsumgebung für Handelsberechnungen mit hoher Genauigkeit - ein gewisser Wettbewerbsvorteil :). Deshalb frage ich, was sie darüber denken.

Bitte lesen Sie noch einmal die Standardform der Zahl, und viele Fragen werden verschwinden.

In der Standardform ist 1,111e5 größer als 9,999e4, so dass der Vergleich durchaus korrekt ist.

Hier ist das gleiche Ergebnis: 9,99999999999999968e-017 hängt mit der binären Darstellung der Zahl zusammen, nicht jede Zahl in binärer Form wird durch einen endlichen Bruch dargestellt, einige werden durch einen unendlichen Bruch dargestellt, daher wird die Mantisse auf die nächstliegende Zahl mit einem endlichen Bruch abgerundet.

Übrigens double d=MathPow(c,2); es ist nicht korrekt, Grad zu nehmen, wenn man mit double arbeitet, dann double d=MathPow(c,2.0); also, ich weiß nicht, ob es ein Fehler ist oder nicht, aber wenn man eine Zahl auf einen Grad setzt, sollte man auch auf den Typ des Indikators achten.

 
-Alexey-:
Fantasie hat damit überhaupt nichts zu tun. Meine Frage bezog sich auf die Möglichkeit, die gängigste Analysemethode anzuwenden. Und das ist die Arbeit mit der Reihe, die nach Abzug des Trends und des Zyklus übrig bleibt. Über diese Methode wird ausnahmslos in allen Lehrbüchern über Finanzstatistiken und Methodenbüchern an Universitäten geschrieben. Dies ist kein Hirngespinst, sondern einer der kanonischen Ansätze der Analyse. Und eine spezialisierte Umgebung sollte über Mittel zur Umsetzung dieses Ansatzes verfügen, meinen Sie nicht auch?
)))))))
 
Urain:

Bitte lesen Sie noch einmal die Standardform der Zahl, und viele Fragen werden verschwinden.

In der Standardform ist 1,111e5 größer als 9,999e4, so dass der Vergleich durchaus korrekt ist.

Hier ist das gleiche Ergebnis: 9,99999999999999968e-017 hängt mit der binären Darstellung der Zahl zusammen, nicht jede Zahl in binärer Form wird durch einen endlichen Bruch dargestellt, einige werden durch einen unendlichen Bruch dargestellt, daher wird die Mantisse auf die nächstliegende Zahl mit einem endlichen Bruch gerundet.

Über die 1,111e5 und die 9,999e4 sehe ich. Aber ich muss diese vergleichen: 9,999999999999999999968e-017 (über den Verlust an Genauigkeit bei den Ziffern habe ich zusätzlich geschrieben). Die Hilfe sagt mir, dass Zahlen mit einer Differenz von weniger als DBL_EPSILON als ununterscheidbar betrachtet werden sollten. Tut mir leid, wenn ich mich nicht klar ausgedrückt habe - ich lerne es gerade erst :) Ich danke Ihnen gesondert für die Informationen über den Indikator.

 
Urain:

Übrigens double d=MathPow(c,2); es ist nicht korrekt, den Grad zu nehmen, wenn man mit double arbeitet, dann double d=MathPow(c,2.0); also, ich weiß nicht, ob es ein Fehler ist oder nicht, aber wenn man eine Zahl auf einen Grad setzt, ist es notwendig, den Typ des Indikators zu folgen.

Der Exponent muss auf jeden Fall vom Typ double sein.
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 

Liebe Entwickler, lassen Sie den Typ void zu, um Werte zurückzugeben, oder definieren Sie eine neue Klasse, die Werte beliebigen Typs zurückgibt.

Etwa so:

voids get(int i)
  {
   if(i==0)return((int)2);
   else
     {
      if(i==1)return((double)2);
      else
        {
         if(i==2)return((string)2);
        }
     }
  }

Ich möchte diese Art von Erklärung in benutzerdefinierten Funktionen haben:

int  Custom_ArraySize( void  array[] );   
bool Custom_ArraySort( number&  array[] );

und dafür muss ich der Sprache etwas hinzufügen. Sie haben die Benutzer zu sehr abgesichert, Sie müssen irgendwo ein wenig lockerer werden.

Stellen Sie sich vor, ein Entwickler schreibt Code, er hat 1500 Zeilen erstellt und der gesamte Code arbeitet mit einem double, um einen int zu übergeben, muss er eine Überladung für 1500 weitere Zeilen durchführen. Und Sie haben 14 Typen.

 
Urain:

Stellen Sie sich vor, eine Person schreibt Code, macht 1500 Zeilen, und der ganze Code arbeitet mit dem Double, um in sie zu übergeben, müssen Sie Überladung für 1500 Zeilen mehr zu tun. Und Sie haben 14 Typen.

OOP verwenden.

 
lea:

OOP verwenden.

Glauben Sie, ich schreibe in Autocode?

an Entwickler:

als eine Variante, um die Not der schreibenden Bruderschaft zu lindern, machen Sie die Array-Typ-Konvertierung, so dass Sie zumindest einen solchen Aufruf machen können:

void OnStart()
  {
   int array[10];
   func((double)array)
  }
//+------------------------------------------------------------------+
void func(double &array[]){};
 
Urain:

Glauben Sie, ich schreibe in Autocode?

Nach der Tatsache zu urteilen, dass Sie eine solche Erweiterung der Sprache benötigten, ist das wohl so.

p.s. Wenn Sie zu dem Zeitpunkt, als Sie Ihr Problem gelöst haben, nur den C++-Compiler hatten, würden wir dann einen Vorschlag zur Überarbeitung des Sprachstandards hören?

 
lea:

Ausgehend von der Tatsache, dass Sie eine solche Erweiterung der Sprache benötigten - offensichtlich ja.

p.s. Wenn Sie zum Zeitpunkt Ihres Problems nur einen C++-Compiler gehabt hätten - hätten wir dann den Vorschlag gehört, den Sprachstandard zu überarbeiten?

Verwechseln Sie nicht Übersetzer und Compiler. mql ist nicht wirklich ein Compiler, sondern ein Übersetzer, der sichere C++-Funktionsaufrufe beschreibt.

Und mql5 befindet sich in der aktiven Entwicklungsphase. Meine Forderung nach Änderungen ist also durchaus angemessen.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
Urain:

Verwechseln Sie nicht Übersetzer und Compiler, mql ist nicht wirklich ein Compiler, es ist ein Übersetzer, der sichere C++ Funktionsaufrufe beschreibt

Außerdem befindet sich mql5 in der aktiven Phase der Entwicklung. Meine Bitte, Änderungen vorzunehmen, ist also durchaus angemessen.

Ok, wenn es so wichtig ist, dann nehmen wir Java und nicht C++. Auch Übersetzung in Bytecode :) Bitte überdenken Sie die Sprachnorm?

Ein Antrag auf Hinzufügung eines Universaltyps ist nicht ganz ausreichend. Sie sollten nach Vorlagen fragen. Und für universelle Typen ist OOP ausreichend.