Баг в коде для вычисления exp в C++

Я написал код для вычисления функции exp, но код работает не корректно. Результат работы программы ровно в половину меньше, как это исправить?

#include <iostream>

int factorial(int number);
float exp();

void main() {
    std::cout << exp() << std::endl;
}

float exp() {
    int x;
    float result = 1.0;
    std::cout << "Enter x: ";
    std::cin >> x;

    for (int i = 1; i <= x; ++i) {
        result += std::pow(x, i) / factorial(i);
    }
    return result;
}

int factorial(int number) {
    int result = 1;
    for (int i = 1; i <= number; ++i) {
        result *= i;
    }
    return result;
}

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

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

Ладно, чтоб было понятно, как:

#include <iostream>

using namespace std;

double Exp(double x, double eps)
{
    double sum = 1, term = 1;
    for(int n = 1; abs(term) >= eps; ++n)
        sum += term *= x/n;
    return sum;
}

int main()
{
    double x;
    cout << "Input x: ";
    cin >> x;
    cout << "exp(" << x << ") = " << Exp(x,1e-7) << endl;
}
→ Ссылка