#include <iostream>
#include <cmath>

// تابعی که می‌خواهیم درون‌یابی کنیم
double f(double x) {
    // اینجا تابع مورد نظر را تعریف کنید
    return x*x - 4;
}

// تابع درون‌یابی نیوتون
double newtonInterpolation(double x0, double epsilon) {
    double x = x0;
    double dx;

    do {
        dx = f(x) / derivative(x);  // محاسبه تقریبی مشتق
        x -= dx;
    } while (std::fabs(dx) > epsilon);

    return x;
}

// مشتق تابع
double derivative(double x) {
    // اینجا مشتق تابع را محاسبه کنید
    return 2*x;
}

int main() {
    double initialGuess = 2.0;  // حدس اولیه برای ریشه
    double epsilon = 0.00001;   // مقدار مورد قبول برای خطای درون‌یابی

    double root = newtonInterpolation(initialGuess, epsilon);

    std::cout << "Root: " << root << std::endl;

    return 0;
}