Я написал масштаб Мандельброта в C++, но масштаб был ограничен из-за неточности с плавающей запятой. Вот почему я написал все, что связано с библиотекой GMP.Такая же функция? работает примерно на 10 раз медленнее с GMP (C++)
Но теперь у меня проблемы с производительностью. Я новичок в GMP, так может быть, я просто перепутала несколько вещей:
Вот исходный код:
int iterate(double xp, double yp, int iterations){
double length = 1;
double x = 0;
double y = 0;
double r;
for(int i = 0; i < iterations && length <= 2; i++){
double xTemp = x;
//calculate real part
x = (x*x)+xp-(y*y);
//calculate imaginary part
y = 2*xTemp*y+yp;
//calculate lenth
length = sqrt(x*x+y*y);
r = i+1;
}
if(length > 2)
return r;
return 0;
}
Та же функция с GMP (я думаю, что это то же самое), Я добавил две переменные, темп и temp2, для хранения значений для расчета, но это не должно делать это в 10 раз медленнее:
int iterateGMP(mpf_t xpGMP, mpf_t ypGMP, int iterations){
double r;
mpf_set_default_prec (20);
mpf_t length;
mpf_init(length);
mpf_set_d(length, 1);
mpf_t x;
mpf_init(x);
mpf_set_d(x, 0);
mpf_t y;
mpf_init(y);
mpf_set_d(y, 0);
mpf_t xTemp;
mpf_init(xTemp);
mpf_t TempGMP;
mpf_init(TempGMP);
mpf_t Temp2GMP;
mpf_init(Temp2GMP);
for(int i = 0; i < iterations && mpf_cmp_ui(length, 2)<0; i++){
mpf_set(xTemp, x);
//calculate real part
mpf_mul(TempGMP, x, x);
mpf_add(TempGMP, TempGMP, xpGMP);
mpf_mul(Temp2GMP, y, y);
mpf_sub(x, TempGMP, Temp2GMP);
//calculate imaginary part
mpf_mul(TempGMP, xTemp, y);
mpf_mul_ui(TempGMP, TempGMP, 2);
mpf_add(y, TempGMP, ypGMP);
//calculate length
mpf_mul(TempGMP, x, x);
mpf_mul(Temp2GMP, y, y);
mpf_add(TempGMP, TempGMP, Temp2GMP);
mpf_sqrt(length, TempGMP);
r = i+1;
}
if(mpf_cmp_ui(length, 2) > 0){
return r;
}
return 0;
}
Надеюсь, кто-то может мне помочь.
Вы включили оптимизацию? 10-кратная потеря производительности не является абсолютно необоснованной для произвольной библиотеки точности. – nwp
Это OT, но вы можете сделать оба кода быстрее, избегая квадратного корня. Просто проверьте (квадрат) длину больше 4. –
@ nwp Как включить оптимизацию? – Joel