我有代码:
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);