私が取り組んでいるプログラムには、3要素の配列があり、すべての目的と目的で数学的なベクトルとして使用しています。
コードを書く過程で、Vector
単純な算術オーバーロード(+, -, * /
)を使用して自分のクラスをロールするだけで、次のようなステートメントを単純化できるようになりました。
// old:
for (int i = 0; i < 3; i++)
r[i] = r1[i] - r2[i];
// new:
r = r1 - r2;
生成されたコードでは、どちらがほぼ同じである必要があります。しかし、もっと複雑なことになると、これは本当に私のパフォーマンスに大きな影響を与える可能性がありますか?私のコードにある1つの例はこれです:
手動で書かれたバージョン:
for (int j = 0; j < 3; j++)
{
p.vel[j] = p.oldVel[j] + (p.oldAcc[j] + p.acc[j]) * dt2 + (p.oldJerk[j] - p.jerk[j]) * dt12;
p.pos[j] = p.oldPos[j] + (p.oldVel[j] + p.vel[j]) * dt2 + (p.oldAcc[j] - p.acc[j]) * dt12;
}
Vector
演算子のオーバーロードでクラスを使用する:
p.vel = p.oldVel + (p.oldAcc + p.acc) * dt2 + (p.oldJerk - p.jerk) * dt12;
p.pos = p.oldPos + (p.oldVel + p.vel) * dt2 + (p.oldAcc - p.acc) * dt12;
この種のコードは内部ループ内で実行されるため、速度を上げるためにコードを最適化しようとしています。これらのことにオーバーロードされた演算子を使用すると、パフォーマンスに影響しますか?私はn個の相互重力体のシステムの数値積分を行っています。これらのベクトル演算は非常に一般的であるため、これを高速に実行することが重要です。
私が知らないイディオムやトリックと同様に、どんな洞察もいただければ幸いです。