У меня есть код:
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 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);