Программа, которая вычисляет значение натурального логарифма 2

Я пытаюсь написать программу, которая читает от пользователя количество терминов, которые будут использоваться при вычислении натурального логарифма 2. Пример: Log (2) с 5 терминами составляет 1/1 — 1/2 + 1/3 — 1/4 + 1/5. Знаменатель увеличивается на 1 с каждым последующим слагаемым, а знаки сложения и вычитания чередуются между каждым слагаемым. Я просто не могу найти правильную настройку петли, чтобы заставить это работать правильно. Любая помощь будет оценена.

-1

Решение

Используйте коэффициент умножения, который переключается с +1 на -1, а затем снова на +1 во время итерации, а затем умножьте текущее значение 1 / n на это.

double ln2(int terms) {

double sign = 1.0
double log = 0.0;

for (double n = 1; n <= terms; n += 1.0) {
// calculate your 1/n term here
log += sign / n;    // == sign * 1.0 / n

// and reverse polarity for the next iteration
sign = -sign;
}

return log;
}

NB: эта серия сходится очень медленно!

1

Другие решения

Вы берете сумму (-1) ^ n * -1 / n. Если вы объедините два смежных термина, вы получите

(-1) ^ (2n-1) * -1 / (2n-1) + (-1) ^ (2n) * -1 / (2n) = 1 / (2n-1) — 1 / (2n) = 1 / (4 * n ^ 2 — 2 * n)

и так вы можете сделать

double ln2(int lim) {
double sum;
for (int n = 1; n <= lim; n++) {
sum += 1.0/n/(4*n - 2);
}
return sum;
}

Это все еще не быстро, но его поведение сходимости лучше.

1

Вы можете иметь отдельную переменную, n что вы добавляете один к каждому разу, проверьте, если это даже с if (n%2 == 0), Если это правда, умножьте свой знаменатель на -1.

0
По вопросам рекламы [email protected]