qSin()给出错误的sin值

qSin() giving wrong sin values?

本文关键字:sin 错误 出错 qSin      更新时间:2023-10-16

我有代码:

for(int i = 0; i < 314; i++){
    float nextSine = aSin(i/5);
    qDebug() << "i: "<<QString::number(i)<<" sin(i/5) = nextSine: "<<nextSine;
}

这是我得到的结果的一个样本:

i:  "303"  sin(i/5) = nextSine:  -0.304811
i:  "304"  sin(i/5) = nextSine:  -0.304811
i:  "305"  sin(i/5) = nextSine:  -0.966118
i:  "306"  sin(i/5) = nextSine:  -0.966118

有时是正确的,但有时是错误的,例如当i==303

您可能希望在运行函数之前强制转换为float:

float nextSine = aSin((float)i/5.0);

你在这里有这些问题:

1)你试图将一个整数除以5,如果整数不能被5整除,可能会失去精度。例如,313/5=62,而不是你的62.6,但这只是其中一个例子。解决方法是显式地使用float。

2)您有一个不必要的nextSine变量。你可以在这里简单地消除它。

3)你的代码中有语法错误,因为你说的是**q**Sin,而不是aSin。

4)确保你的内联函数尽可能有效。

5)你试图使用显式空间打印,但qDebug已经为你管理,所以你最终有两个而不是预期的一个。

所以,这是我个人想写的:

for (int i = 0; i < 314; ++i)
     qDebug() << "i:" <<QString::number(i)
              << " sin(i/5) = nextSine:" << qSin(static_cast<float>(i)/5);

for (int i = 0; i < 314; ++i)
     qDebug() << "i:" <<QString::number(i)
              << " sin(i/5.0) = nextSine:" << qSin(i/5.0);

for (float f = 0; f < 314.0; f+=1.0)
     qDebug() << "i:" <<QString::number(f, 'f')
              << " sin(f/5) = nextSine:" << qSin(f/5);