Я пытаюсь ускорить код в функции, которая может вызываться много раз (возможно, более миллиона). Код связан с установкой двух переменных в случайные числа и нахождением квадрата расстояния. Моей первой идеей для этого является развертывание цикла, но я немного запутался в том, как мне это выполнить, из-за условия while
, которое диктует это.
Чтобы ускорить мою программу, я заменил встроенную в С++ функцию rand() пользовательской, но я не знаю, как сделать мою программу еще быстрее.
do {
x = customRand();
y = customRand();
distance = x * x + y * y; // euclidean square distance
} while (distance >= 1.0);
customRand()
. От 0 до 100 намного сложнее получитьdistance < 1.0
, но от 0 до 1 это происходит быстрее. - person Hatted Rooster   schedule 25.05.2019if (x*x+y*y<1) break;
в цикле. Но я сомневаюсь, что это ускорит казнь. Вы должны сравнить время выполнения между кодом, оптимизированным компилятором, и вашей собственной оптимизацией. - person Dialecticus   schedule 25.05.2019rand
. Я не хочу недооценивать ваши навыки программирования, но вы уверены, что<random>
библиотека хуже, чем вашаcustomRand
? - person Quimby   schedule 25.05.2019<random>
и найдите подходящий генератор, отвечающий вашим потребностям. Вместо того, чтобы продолжать генерировать случайные значения до тех пор, пока вы не получите пару, отвечающую вашим требованиям, преобразуйте значенияx
иy
так, чтобы они однозначно соответствовали вашим требованиям. Например, если вы выбираете генератор, который гарантированно генерирует значение от0
до10
, простое добавление1
кx
иy
гарантирует выполнение вашего условия. Не нужно вычислятьdistance
, не нужно его проверять и вообще не нужен цикл. - person Peter   schedule 25.05.2019