你会如何比较花花公子&从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)