你會如何比較花花公子&從Cpp端發送到QML功能的雙打?如何將高精度比較從Cpp端發送到QML函數的浮點數和雙精度?
如果我想提到here
bool AreSame(double a, double b) {
return fabs(a - b) < EPSILON;
}
我應該如何在Qt的QML這樣做是爲了做一個高精度比較討論像下面?
或者,它被鑄造到real in QML &一個不需要擔心它?
你會如何比較花花公子&從Cpp端發送到QML功能的雙打?如何將高精度比較從Cpp端發送到QML函數的浮點數和雙精度?
如果我想提到here
bool AreSame(double a, double b) {
return fabs(a - b) < EPSILON;
}
我應該如何在Qt的QML這樣做是爲了做一個高精度比較討論像下面?
或者,它被鑄造到real in QML &一個不需要擔心它?
你應該做的一樣的JavaScript:
x = 0.2 + 0.1;
y = 0.3;
equal = Math.abs(x - y) < Number.EPSILON;
注:在QML所有的實數都存儲在雙精度,IEEE浮點格式。
從documentation on data type conversion
+----------------+----------------+
| Qt Type | QML Basic Type |
+----------------+----------------+
| [...] | [...] |
| double | double |
| [...] | [...] |
| float, qreal | real |
+----------------+----------------+
因此,根據該文件不是一切都neccessarily鑄造到real
,但一切都將具有相同的精度,所以我覺得你可以投或比較它們的你喜歡。
您可以創建一個JavaScript Library,在其中實現該功能,正如您的問題中所述。
或者你可以創建一個C++對象,並且你可以直接在C++中實現。然後你可以決定是否在每個文件中實例化這個對象,你需要它的地方,還是創建一個單例實例作爲庫。 AFAIK QML在靜態函數方面存在問題並需要該對象的一個實例。
我不知道QML中的任何預定義變量指定了epsilon
。在C++中,對我來說是這樣的:
std::numeric_limits<double>::epsilon() -> 2.220446049250313e-16
所以這個東西可能是一個不錯的選擇。
所以,每當我比較,我想用小量做一個高精度的比較。你有什麼建議,我應該怎麼做'qml'文件?或者你認爲不需要在'qml'文件中複製下面的方法(問題中提到)? 'bool AreSame(double a,double b){return to fabs(a - b)
好吧,我主要關注的是「*或者,它是在QML中被真正轉化爲真實的嗎?」 – derM
:)這個問題的主要目標是如何複製這個: 'bool AreSame(double a,double b){return fabs(a - b)