问题描述:
如何求一个数的n次方根?
文章来源于Access论坛帖子 http://www.accessoft.com/bbs/showtopic.asp?id=30352 西出阳关无故人 版主的回答
解决方法:
'使用方法:开方(被开方数,次方,是否只获取平方根) 开方(4,2) 开方(4,2,False)
'如果输入的参数"次方"为奇数或者没指定参数"算术平方根",默认计算的是算术平方根
'如果输入的参数"次方"为偶数并且指定参数"算术平方根"为True,返回的是数组 数组下标为0的是正数方根 下标为1的是负数方根
Function 开方(被开方数 As Double, 次方 As Double, Optional 算术平方根 As Boolean = False)
If 次方 Mod 2 = 0 And 被开方数 < 0 Then
MsgBox "次方为偶数时 输入的被开方数不能为负数!", vbOKOnly, "参数错误"
Exit Function
End If
If 次方 Mod 2 = 0 And 算术平方根 = True Then
Dim arrRes(2) As Double
arrRes(0) = 被开方数 ^ (1 / 次方)
arrRes(1) = 0 - arrRes(0)
开方 = arrRes
Exit Function
End If
开方 = (IIf(被开方数 > 0, 被开方数, 0 - 被开方数) ^ (1 / 次方)) * (IIf(被开方数 < 0 And 次方 Mod 2 <> 0, -1, 1))
End Function
用法示例:
Function test开方()
'正确示例1
MsgBox 开方(2.56, 2)
MsgBox 开方(-8, 3)
'正确示例2
MsgBox 开方(2.56, 2.2, False)
'正确示例3
Dim arrRes As Variant
arrRes = 开方(2.56, 2, True)
MsgBox arrRes(0)
MsgBox arrRes(1)
MsgBox 开方(2.56, 2, True)(0)
MsgBox 开方(2.56, 2, True)(1)
'错误示例
'MsgBox 开方(-4, 2)
'MsgBox 开方(-4, 2, True)
'MsgBox 开方(-4, 2, False)
End Function