C ++: реализация приближения numeri c для ln (a) - PullRequest
3 голосов
/ 02 августа 2020

Я хочу реализовать формулу:

введите описание изображения здесь

#include <iostream>
#include <cmath>
#include <limits>

using namespace std;

int main(){
    double a, eps = numeric_limits<double>::epsilon();
    cout << "a=";
    cin >> a;
    double w = sqrt(a), prod = 1 + w;
    int n = 1;
    do {
        w = sqrt(w);
        prod *= 1 + w;
        cout << "ln(" << a << ")=" << ldexp(a-1, n)/prod << endl;
        n++;
    } while(abs(w - 1) > eps);

    return 0;
}

Но, например, ln (2,78787) = 0,512639, а это не может быть правдой. Где ошибка?

1 Ответ

4 голосов
/ 02 августа 2020

Начальные условия для l oop выключены. Начните с

double w = a, prod = 1;

, и программа выдаст ожидаемые результаты

...