VB線上說明中關於數學函數的錯誤

VB 提供了 Sin、Cos、Tan、Atn 等基本數學函數,其他非基本數學函數例如反三角函數則沒提供,但是 VB 很貼心地幫我們列出了一些常用的非基本數學函數的公式,選取 VB 功能表的 / 說明 / Microsoft Visual Basic說明主題 /,再輸入 "可推導數學函數",即可找到那些公式,不過我發現關於反三角函數的公式都有問題,茲列出如下:

函數名稱 導出公式 x=1 x=0.5 x=2
Inverse Sine Arcsin(X) = Atn(X / Sqr(-X * X + 1)) 除以零
(1.5708)
0.5236
(0.5236)
Inverse Cosine Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1) 除以零(0) 1.0472
(1.0472)
Inverse Secant Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1)) 除以零(0) 2.4279
(1.0472)
Inverse Cosecant Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1)) 除以零
(1.5708)
0.8571
(0.5236)
Inverse Cotangent Arccotan(X) = Atn(X) + 2 * Atn(1) 2.3561
(0.7854)
2.0344
(1.1071)
2.6780
(0.4636)

上表列出了 VB 提供的公式所計算的結果,括號部分就是我用 MatLab 5.0 算出的正確答案,可見 VB 提供的公式是錯的離譜啊!我把這些公式都修正過了,請參考本站數學函數的運算,使用修正後的公式也可算出正確答案,希望 VB6 以後的版本能修正這個線上說明中的錯誤。

以下提供我測試用的程式碼,您最好知道該函數的定義域,否則亂傳 x 的結果可能會產生複數(complex)的運算,而 VB 並不支援複數運算,所以會產生 run-time error,不過您可參考本站的 複數的四則運算

Private Sub Command1_Click()
     Dim x
     x = 0.5
     Debug.Print Atn(x / Sqr(-x * x + 1))
     Debug.Print Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
     Debug.Print Atn(x / Sqr(x * x - 1)) + Sgn((x) - 1) * (2 * Atn(1))
     Debug.Print Atn(x / Sqr(x * x - 1)) + (Sgn(x) - 1) * (2 * Atn(1))
     Debug.Print Atn(x) + 2 * Atn(1)
End Sub

[ 上一個 | 首頁 | 重要觀念 | 下一個 ]

This page was written by Jaric on May. 27 , 1999. All rights reserved.

Total pageview since 4/6/1999.