C++ qFastSin和qFastCos(速度、安全性和精度)
最近我在C++ qFastSin和qFastCos(速度、安全性和精度),c++,api,qt,math,C++,Api,Qt,Math,最近我在qmath.h中发现了两个数学函数,分别命名为qFastSin和qFastCos。这些函数是内联的,使用查找表计算sin和cos的值: inline qreal qFastSin(qreal x) { // Calculating si would be more accurate with qRound, but slower. int si = int(x * (0.5 * QT_SINE_TABLE_SIZE / M_PI)); qreal d = x -
qmath.h
中发现了两个数学函数,分别命名为qFastSin
和qFastCos
。这些函数是内联的,使用查找表计算sin和cos的值:
inline qreal qFastSin(qreal x)
{
// Calculating si would be more accurate with qRound, but slower.
int si = int(x * (0.5 * QT_SINE_TABLE_SIZE / M_PI));
qreal d = x - si * (2.0 * M_PI / QT_SINE_TABLE_SIZE);
int ci = si + QT_SINE_TABLE_SIZE / 4;
si &= QT_SINE_TABLE_SIZE - 1;
ci &= QT_SINE_TABLE_SIZE - 1;
return qt_sine_table[si] + (qt_sine_table[ci] - 0.5 * qt_sine_table[si] * d) * d;
}
inline qreal qFastCos(qreal x)
{
// Calculating ci would be more accurate with qRound, but slower.
int ci = int(x * (0.5 * QT_SINE_TABLE_SIZE / M_PI));
qreal d = x - ci * (2.0 * M_PI / QT_SINE_TABLE_SIZE);
int si = ci + QT_SINE_TABLE_SIZE / 4;
si &= QT_SINE_TABLE_SIZE - 1;
ci &= QT_SINE_TABLE_SIZE - 1;
return qt_sine_table[si] - (qt_sine_table[ci] + 0.5 * qt_sine_table[si] * d) * d;
}
我在Google和Qt Assistant上搜索了关于它们的信息,但没有好的文档
有人知道这些函数的精度和性能吗?(特别精确)它们不属于公共API的一部分,不受支持,也没有文档记录,并且可能会发生更改 Qt只记录它支持的内容和它的特性。这样很好 它看起来像一个简单的线性插值,因此精度取决于
QT\u SINE\u TABLE\u SIZE
以及输入与采样点的距离。更糟糕的情况是1-sin(pi/2+2*pi*(QT\u SINE\u TABLE\u SIZE/2))
如果您更关心性能而不是准确性,那么您可以在实践中使用它们,但从理论上讲,它们可能会在将来被完全删除。它们不是公共API的一部分,不受支持,没有文档记录,并且可能会发生更改 Qt只记录它支持的内容和它的特性。这样很好 它看起来像一个简单的线性插值,因此精度取决于
QT\u SINE\u TABLE\u SIZE
以及输入与采样点的距离。更糟糕的情况是1-sin(pi/2+2*pi*(QT\u SINE\u TABLE\u SIZE/2))
如果您更关心性能而不是准确性,那么您可以在实践中使用它们,但在理论上,它们可能会在将来被完全删除