VBA: Ошибка в вычислении суммы членов ряда.
Макрос написан в Visual Basic for Application в MS Word. Суть задачи в нахождении суммы членов ряда, имея такие условия:
x=pi/6 , отклонение: 0,5*10E-4. Количество членов ряда n=5.
x=pi/6, n=5 и 0,5*10E-4 нужны при тестировании программы. Так же известно, что cos(x) равен s.
Для проверки значений я использовал MS Excel. При проверке получилось, что cos(x)=s, что придало уверенности, что проверка правильна. Когда программа вывела результат он отличался от проверки. Допустимое отклонение указывает, что программа написана неправильно.
Код:
Dim fact As Single
Dim i As Integer
Dim n As Integer
Dim S As Single
Dim x As Single
'Виведення назви програми
MsgBox ("Iter_cykl_za_index")
'Введення занчень x, n
x = InputBox("Ввести значення x=")
n = InputBox("Ввести значення n=")
S = 1
fact = 1
For i = 1 To n - 1
fact = fact * 2 * i
S = S + (((-1) ^ (2 * i + 1)) * ((x ^ (2 * i)) / fact))
Next i
' Виведення значень i та s
MsgBox ("i=" + Str(i) + ";" + Chr(13) + "s=" + CStr(S) + ";")
End Sub
Проверка показало такое значение - 0,866025403784439
Программа показала немного иное значение (при вышеуказанном тексте программы) - 0,85083.
У меня есть вариант, что я неправильно записал факториал, точнее, прирост факториала.
Может быть (2*n)! ?
S = S + (((-1) ^ (2 * i + 1)) * ((x ^ (2 * i)) / 2*fact))
S = S + (((-1) ^ (2 * i + 1)) * ((x ^ (2 * i)) / 2*fact))
Это не изменило бы ситуации. Ответ был бы другим и неправильным, я разные вариации пробовал.
Вот то, что я заменил, т.е. на что заменил, часть кода. Теперь считает правильно.
Код:
For i = 1 To n - 1
fact = 1
For j = 1 To 2 * i
fact = fact * j
Next j
S = S + (((-1) ^ i) * ((x ^ (2 * i)) / fact))
Next i
Спасибо, Bonez92, который подсказал, необходимое направление решения проблемы.