Векторизация числовой интеграции C ++ - код ошибки 1200 - PullRequest
0 голосов
/ 21 апреля 2020

Я пишу числовой код интеграции, но мне не удается его векторизовать, так как я продолжаю получать код ошибки 1200 .

В основном моя процедура заключается в следующем. Объект Fxy представляет собой 2D-функцию. Насколько я понимаю, вызов функции f вызовет проблемы, когда она не может быть встроена. Однако добавление ключевого слова inline не помогло.

class Fxy
{
public:
    inline double operator()(double, double) const;
}

double integrate(Fxy f, std::vector<double> x, std::vector<double> w){
    double ans = 0.0;
    for (size_t i = 0; i < x.size(); ++i){
        for (size_t j = 0; j < x.size(); ++j){
            ans += f(x[i], x[j]) * w[i] * w[j];
        }
    }
    return ans;
}

1 Ответ

0 голосов
/ 21 апреля 2020

Один из возможных способов решить эту проблему - использовать __forceinline.

class Fxy
{
public:
    __forceinline double operator()(double, double) const;
}

double integrate(Fxy f, std::vector<double> x, std::vector<double> w){
    double ans = 0.0;
    for (size_t i = 0; i < x.size(); ++i){
        for (size_t j = 0; j < x.size(); ++j){
            ans += f(x[i], x[j]) * w[i] * w[j];
        }
    }
    return ans;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...