Я нашел этот структурный код в примере Джулии Сет из книги по CUDA. Я начинающий программист C и не могу понять, что он делает, и я не нашел нужную информацию в Интернете, чтобы разобраться в этом. Вот структура:
struct cuComplex {
float r;
float i;
cuComplex( float a, float b ) : r(a), i(b) {}
float magnitude2( void ) { return r * r + i * i; }
cuComplex operator*(const cuComplex& a) {
return cuComplex(r*a.r - i*a.i, i*a.r + r*a.i);
}
cuComplex operator+(const cuComplex& a) {
return cuComplex(r+a.r, i+a.i);
}
};
и это называется очень просто так:
cuComplex c(-0.8, 0.156);
cuComplex a(jx, jy);
int i = 0;
for (i=0; i<200; i++) {
a = a * a + c;
if (a.magnitude2() > 1000)
return 0;
}
return 1;
Итак, код сделал что? Определено что-то типа структуры «cuComplex», дающее реальные и мнимые части числа. (-0,8 и 0,156) Что возвращается? (Или помещен в структуру?) Как мне работать с логикой оператора в структуре, чтобы понять, что на самом деле рассчитывается и хранится там?
Я думаю, что он, вероятно, выполняет рекурсивные вызовы обратно в структуру
float magnitude2 (void) { return return r * r + i * i; }
, вероятно, вызывает оператор '*' для r и снова для i, а затем результаты этих двух операций вызывают оператор '+'? Это правильно и что возвращается на каждом этапе?
Просто в замешательстве.
Спасибо!