それはあなたが望むものに依存します。明らかに、 へのストレート キャストは へint
の呼び出しよりも高速ですがround
、ラウンドではより正確な値が得られます。
速度が効果的であることに依存するコードを実行している場合を除き (この場合、浮動小数点値も使用するのに最適ではない可能性があります) round
、. 画面に表示されるものを 1 ピクセルだけ変更するだけでも、特定のもの (角度測定、色など) を処理する場合は、精度が高いほど良い結果が得られます。
編集:キャストが丸めよりも速いという私の主張を裏付ける簡単なテスト:
Macbook Pro でテスト:
- 2.8 GHz インテル Core 2 Duo
- Mac OS 10.7.4
- Apple LLVM 3.1 コンパイラ
- -O0 (最適化なし)
コード:
int value;
void test_cast()
{
clock_t start = clock();
value = 0;
for (int i = 0; i < 1000 * 1000; i++)
{
value += (int) (((i / 1000.0) - 1.0) * 10.0);
}
printf("test_cast: %lu\n", clock() - start);
}
void test_round()
{
clock_t start = clock();
value = 0;
for (int i = 0; i < 1000 * 1000; i++)
{
value += round(((i / 1000.0) - 1.0) * 10.0);
}
printf("test_round: %lu\n", clock() - start);
}
int main()
{
test_cast();
test_round();
}
結果:
テストキャスト: 11895
テストラウンド: 14353
注: これclock()
が最適なプロファイリング関数ではないことはわかっていますがround()
、少なくともより多くの CPU サイクルを使用していることを示しています。