2017-07-24 2 views
0

Wie würden Sie Floats & verdoppelt in QML-Funktionen von Cpp Seite gesendet vergleichen?Wie würden Sie mit hoher Präzision floats & doubles vergleichen, die von Cpp-Seite in QML-Funktionen gesendet werden?

Wenn ich eine hohe Präzision comparasion wie unten tun wollen als here erwähnt

bool AreSame(double a, double b) { 
    return fabs(a - b) < EPSILON; 
} 

Wie soll ich dies in Qt QML?

Oder, ist es, dass es zu real in QML & gegossen wird man sich keine Sorgen machen muss?

Antwort

1

Vom documentation for real

Hinweis: QML alle reellen Zahlen in doppelter Genauigkeit gespeichert sind, Floating-Point-Format IEEE.

Vom documentation on data type conversion

+----------------+----------------+ 
| Qt Type  | QML Basic Type | 
+----------------+----------------+ 
| [...]   | [...]   | 
| double  | double  | 
| [...]   | [...]   | 
| float, qreal | real   | 
+----------------+----------------+ 

So, nach der Dokumentation nicht alles neccessarily zu real gegossen wird, aber alles wird die gleiche Präzision, so dass ich denke, man kann sie werfen oder vergleichen, wie du magst.

Sie können entweder eine JavaScript Library erstellen, in der Sie die Funktion implementieren, wie in Ihrer Frage beschrieben. Sie können ein C++ - Objekt und expose a this function erstellen, sodass Sie die Implementierung direkt in C++ haben Dann können Sie entscheiden, ob Sie dieses Objekt in jeder Datei instanziieren, wo Sie es benötigen oder ob Sie eine Singleton-Instanz als Bibliothek erstellen. AFAIK QML hat Probleme mit statischen Funktionen und benötigt eine Instanz des Objekts.

Ich kenne keine vordefinierte Variable in QML, die eine epsilon angibt. In C++, für mich ist:

std::numeric_limits<double>::epsilon() -> 2.220446049250313e-16 

so etwas um dies könnte eine gute Wahl sein.

+0

so, wenn ich vergleiche, habe ich eine hohe Präzision Vergleich mit epsilon tun wollen. Schlägst du irgendetwas vor, wie soll ich das in einer 'qml' Datei machen? ODER denken Sie, dass es unnötig ist, folgende (in Frage stehende) Methode in einer 'qml' Datei zu replizieren? 'Bool AreSame (doppelte a, doppelte b) { Rücksendungen (a - b)

+1

Ok, ich konzentrierte mich hauptsächlich auf" * Oder, ist es, dass es zu real in QML gegossen wird und man sich nicht darum kümmern muss? * " – derM

+0

:) Primäres Ziel dieser Frage ist, wie man das repliziert: - 'bool AreSame (doppelte a, doppelte b) {return fabs (a - b)

Verwandte Themen