• Какой кусок кода дописать, чтобы вычислить логарифм с заданной точностью?

    longclaps
    @longclaps
    for (int i = 1; i < 5000; i += 2) {
        sum += (pow(x, i) / (double)i - pow(x, i + 1) / (double)(i + 1));
        // смотрите, здесь у вас скомбинированы слогаемые разного знака.
        // но, если их растащить, получится сходящийся знакопеременный ряд,
        // а погрешность по модулю не превышает второе слогаемое.
    }
    
    // как-то так
    double first, second = 1;
    for (int i = 1; abs(second) > epsilon; i += 2) {
        first  = pow(x, i) / (double)i;
        second = pow(x, i + 1) / (double)(i + 1);
        sum += first - second;
    }

    update
    чота ответ плюсуют безоглядно, и хоть бы кто сообразил, что ряд знакопеременный лишь при x>0.
    Для x<0, т.е. для аргумента логарифма (1+х)<1, следует посчитать логарифм (как сумму ряда) для обратной величины, ну и знак поменять, конечно.
    Ответ написан
    1 комментарий