2015-09-25 63 views
0

我写了一个程序来使用Maclaurin系列来计算sin(x),但是当我尝试调试它时,它给出了溢出错误。这里是代码,任何人都可以帮助我?maclaurin series for 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 
+0

一个问题是您的循环尝试计算e是20的阶乘,它太大而不适合整数。它应该适合一个Long,所以尝试改变Factorial函数来返回一个Long。 – Blackwood

+0

@blackwood我只是试了很长时间并调试过它,我得到了一个“南”的输出 –

+0

恐怕我不熟悉Maclaurin系列,所以我可以得到有限的帮助。 NaN(非数字)的一个原因是你的循环尝试将-1加到x.5的幂(换句话说,计算-1的平方根)。你确定你正在实现正确的算法吗? – Blackwood

回答

0

下面的代码给出了一个角的使用麦克劳林系列

为你的接口需要2个标签,2个文本框和3个按钮

公共类Maclaurin_series

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 Long 

    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 


Private Sub BtnExit_Click(sender As Object, e As EventArgs) Handles BtnExit.Click 
    Close() 
End Sub 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    TxtAns.Text = "" 

    TxtInput.Text = " " 
End Sub 
正弦答案

结束类别

相关问题