2017-02-08 109 views
1

Я делаю JavaScript функцию, которая вычисляет натуральный логарифм за пройденный номер с помощью Taylor серии, но я получаю неверные результаты.
Я знаю, что есть встроенный метод в объекте Math для выполнения этой задачи, но функция, над которой я работал, имеет порог.Получение неверных результатов из функции, которая вычисляет натуральный логарифм

function ln(num,threshold) { 
    "use strict"; 
    var i; 
    var result=0; 
    if (num<=0) { 
     result="Error:Cannot Calculate The Natural Logarithm For A Negative Number"; 
    } 
    else { 
     for (i=1;i<=threshold;i++) { 
      result+=Math.pow(-1,i-1)*Math.pow(num-1,i)/i; 
     } 
     result = result.toFixed(20); 
    } 
    return result; 
} 

ln(3,17); //output is 5038.54220028337658732198 
+0

Почему вы используете 'arguments' по именованным параметрам? –

+1

@SterlingArcher на самом деле сэр, я использую его в проекте «не домашнее задание или что-то в этом роде», и я хочу, чтобы все выглядело сложным. –

+0

cluttered не то же самое, что сложный –

ответ

3

Вы не используете серию Тейлора правильно. Если вы читаете страницу википедии, то она указывает следующее:

«Серия сходится к натуральному логарифму (сдвинутому на 1) всякий раз, когда -1 < x < 1."

Итак, вы используете 3, которые не попадают в этот диапазон, поэтому он не сходится.

https://en.wikipedia.org/wiki/Natural_logarithm#Derivative.2C_Taylor_series https://en.wikipedia.org/wiki/Natural_logarithm#/media/File:LogTay.svg https://en.wikipedia.org/wiki/Mercator_series

И действительно работает ln(2, 17) выплевывает гораздо более подходящий номер.