0
Я написал программу для вычисления sin (x) с использованием серии Maclaurin, но когда я попытался отладить ее, она выдала ошибку переполнения. Вот код, может ли кто-нибудь помочь мне?Серия maclaurin для sin (x)
Public Class Form1
Private Function sin(ByVal x As Double) As Double
Dim sinx, radx, abc As Double
sinx = 0
radx = x * Math.PI/180
For i = 1 To 20 Step 2
abc = (Math.Pow(-1, (i/2)) * Math.Pow(radx, i))/factorial(i)
sinx += abc
Next
Return sinx
End Function
Private Function factorial(ByVal n As Integer) As Integer
If (n = 0) Or (n = 1) Then
Return 1
Else
Return n * factorial(n - 1)
End If
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub BtnCalc_Click(sender As Object, e As EventArgs) Handles BtnCalc.Click
Dim x As Integer
x = Val(TxtInput.Text)
TxtAns.Text = sin(x)
End Sub
End Class
Одна из проблем заключается в том, что ваша петля пытается вычислить e факториал 20, который слишком велик, чтобы вписаться в Integer. Он должен вписываться в длинный, хотя, поэтому попробуйте изменить функцию Factorial, чтобы вернуть Long. – Blackwood
@blackwood Я просто пробовал и отлаживал его, я получил результат «Нан» –
Боюсь, что я не знаком с серией Maclaurin, поэтому я могу иметь ограниченную помощь. Одной из причин для NaN (Not a Number) является то, что ваша петля пытается поднять -1 до степени x.5 (другими словами, вычислить квадратный корень из -1). Вы уверены, что используете правильный алгоритм? – Blackwood