excel 如何在VBA中计算/定义ArcSin函数?

vxf3dgd4  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(258)

如何实现arcsin函数的VBA代码(定义如下)?

定义:反正弦函数是正弦函数的反函数。它返回正弦为给定数字的Angular 。对于每个三角函数,都有一个反向函数。这些反函数具有相同的名称,但前面有'arc'。(在一些计算器上,arcsin按钮可能被标记为sin,或者有时是sin-1。)所以sin的逆是arcsin等。当我们看到“arcsin A”时,我们把它理解为“罪是A的天使”

sin 30 = 0.5平均值:30度的正弦是0.5
arcsin 0.5 = 30平均值:sin为0.5的角为30度。

snz8szmq

snz8szmq1#

我不太明白你的问题,VBA中已经有了arcsin函数,你可以使用它:

WorksheetFunction.Asin(myValue)

反正弦函数的使用

Dim myValue As Double
myValue = 0.1234

MsgBox CStr(WorksheetFunction.Asin(myValue))

在那里,您可以将值的arcsin函数的结果打印为Double。

u59ebvdq

u59ebvdq2#

下面的代码将帮助实现基于给定定义的ARCSIN函数:

Option Explicit
    Public Const Pi As Double = 3.14159265358979
    Private Function ArcSin(X As Double) As Double
      If Abs(X) = 1 Then
        'The VBA Sgn function returns an integer (+1, 0 or -1),
        'representing the arithmetic sign of a supplied number.
        ArcSin = Sgn(X) * Pi / 2
      Else
        'Atn is the inverse trigonometric function of Tan,
        'which takes an angle as its argument and returns
        'the ratio of two sides of a right triangle
        ArcSin = Atn(X / Sqr(1 - X ^ 2))
      End If
    End Function
ef1yzkbh

ef1yzkbh3#

ASIN比VBA版本慢4.7倍。
(Also,在Excel VBA帮助中搜索“派生数学函数”。)
我在Excel 2010中使用kernal 32函数'QueryPerformanceCounter()'和'QueryPerformanceFrequency()'进行了速度比较。
下面是我测试的函数(检查以避免#DIV/0!错误):

Public Function ASin( _
      ByVal x As Double _
      ) As Double

   Const PIover2 As Double = 1.5707963267949

   If (x = 1) Then
      ASin = PIover2
   ElseIf (x = -1) Then
      ASin = -PIover2
   Else
      ASin = Atn(x / Sqr(-x * x + 1))
   End If

End Function

我使用10,000,000次迭代来测试该函数,以不同的顺序和组调用这两个函数,以考虑任何“灌注井”效应(我假设)。(您可以在下面看到,我调用VBA函数10 M次,然后WorksheetFunction 10 M次两次,等等。)以下是速度测试结果:

'WorksheetFunction is about 4.7 times slower than VBA
'    VBA(1)   WSF(1)   WSF(2)   VBA(2)   VBA(3)   WSF(3)   WSF/VBA
'    1.983    9.383    9.377    1.968    1.976    9.410    4.753

相关问题