Ошибка -nan(ind) при работе с cos и exp

Вычисляю интеграл методом трапеций, при попытке вывести результат пишется -nan(ind). Как я понял, это возникает из-за операций с близкими к 0 числами или использовании exp(). Как это можно исправить?

#include <iostream>
#include <locale.h>
#include <math.h>
#include <omp.h>
using namespace std;
int main() {
    setlocale(LC_ALL, "Ru");
int a = 0, b = 2, i, steps = 100'000'000;
    double x1,x2, sum = 0, oneStep = ((double)b - a) / steps;
    cout << "Вычисление интеграла методом трапеций..." << endl;
    auto t = omp_get_wtime();
    #pragma omp parallel private(i, x1, x2)
    {
        #pragma omp for reduction(+:sum)
        for (i = 0; i < steps; ++i)
        {
            x1 = a + (i * oneStep);
            x2 = a + (i * 1.0) + oneStep;
            sum += ((cos(exp(x1 / 3.0) + 0.2 * x1)) + (cos(exp(x2 / 3.0) + 0.2 * x2)))/2;
        }
    }
    sum *= oneStep;
    t = omp_get_wtime() - t;
    cout << "Значение интеграла равно " << sum << endl << "Вычисление заняло " << t << " секунд." << endl;

Ответы (1 шт):

Автор решения: Harry

У вас в

x1 = a + (i * oneStep);
x2 = a + (i * 1.0) + oneStep;

для x2 явно неверная формула... явно перепутали + и *...:

x2 = a + (i + 1.0)*oneStep;

Получаются сверхбольшие значения для exp...

→ Ссылка