我有代码:
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
答案 0 :(得分:2)
您可能希望在运行函数之前强制转换为浮动:
float nextSine = aSin((float)i/5.0);
答案 1 :(得分:1)
这里有这些问题:
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);