2

私はコードを持っています:

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

4

2 に答える 2

2

関数を実行する前に float にキャストしたいでしょう:

float nextSine = aSin((float)i/5.0);
于 2014-05-25T03:08:32.127 に答える
1

ここでこれらの問題が進行中です:

1) 整数を 5 で除算しようとしていますが、整数が 5 で割り切れない場合は精度が失われる可能性があります。たとえば、313/5=62 であり、62.6 ではありませんが、これはその一例にすぎません。解決策は、float を明示的に使用することです。

2) 不必要な nextSine 変数があります。ここでそれを削除するだけです。

3) aSin ではなく **q**Sin を意味しているため、コードに構文エラーがあります。

4) 可能な限り効果的になるように、関数をインライン化するようにしてください。

5)印刷に明示的なスペースを使用しようとしていますが、qDebugはすでにそれを管理しているため、意図したものではなく2つになります。

だから、これは私が個人的に書くことです:

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);
于 2014-05-25T03:46:26.137 に答える