Хороший способ сделать быстрое разделение в C ++? - PullRequest
12 голосов
/ 23 мая 2009

Иногда я вижу и использую следующий вариант для быстрого деления в C ++ с числами с плавающей запятой.

// orig loop
double y = 44100.0;
for(int i=0; i<10000; ++i) {
double z = x / y;
}

// alternative
double y = 44100;
double y_div = 1.0 / y;

for(int i=0; i<10000; ++i) {
double z = x * y_div;
}

Но кто-то недавно намекнул, что это может быть не самый точный способ.

Есть мысли?

Ответы [ 11 ]

0 голосов
/ 23 мая 2009

Я зацикливался 10 000 раз просто для того, чтобы заставить код достаточно долго измерять время? Или у вас есть 10000 номеров, чтобы разделить на одно число? Если первое, поместите "y_div = 1.0 / y;" внутри цикла, потому что это часть операции.

Если последнее, да, умножение с плавающей запятой, как правило, быстрее, чем деление. Не изменяйте свой код с очевидного на тайный, основанный на догадках. Сначала сравните результаты, чтобы найти медленные точки, а затем оптимизируйте их (и проведите измерения до и после, чтобы убедиться, что ваша идея действительно приводит к улучшению)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...