#################在VB中如何进行开方问题,可能问题有点菜?###################
我想把一个数进行n次方,开平方我知道用sqr()函数,但是3 次以上开方怎样处理!
谢谢!!
问题点数:60、回复次数:5Top
1 楼lwaaa(迦叶)回复于 2004-12-01 21:44:18 得分 0
关注ingTop
2 楼aohan(aohan)回复于 2004-12-01 22:06:09 得分 30
用syzhangxiao的方法,代码如下:
Function cube(ByVal p As Double) As Double
Dim xk As Double, xknext As Double
Dim wucha As Double, currentwc As Double
'牛顿迭代法
wucha = 0.0001 '误差定义:10的-4次方
xk = 1#
xknext = xk - (xk * xk * xk - p) / (3 * xk * xk)
currentwc = Abs(xknext - xk) / (1 + Abs(xknext))
While (currentwc > wucha)
xk = xknext
xknext = xk - (xk * xk * xk - p) / (3 * xk * xk)
currentwc = Abs(xknext - xk) / (1 + Abs(xknext))
Wend
cube = xknext
End Function
'用此方式,可以写成开n次方(n为整数)的函数如下:
Function extration(ByVal p As Double, pow As Integer) As Double
Dim xk As Double, xknext As Double
Dim wucha As Double, currentwc As Double
'偶数次幂,P不能小于0
If pow And 2 Then
If p < 0 Then
Exit Function
End If
End If
'牛顿迭代法
wucha = 0.0001 '误差定义:10的-4次方
xk = 1#
xknext = xk - (xk ^ pow - p) / (pow * xk ^ (pow - 1))
currentwc = Abs(xknext - xk) / (1 + Abs(xknext))
While (currentwc > wucha)
xk = xknext
xknext = xk - (xk ^ pow - p) / (pow * xk ^ (pow - 1))
currentwc = Abs(xknext - xk) / (1 + Abs(xknext))
Wend
extration = xknext
End Function
Top
3 楼aohan(aohan)回复于 2004-12-01 22:08:01 得分 0
还引用一个Bardo的方法
用指数与对数的方法也可以做:
因为 y=x^3
所以 log(y) = 3*log(x) (注意:VB中的log实际是ln)
log(x)= (log(y))/3
所以 x= exp((log(y))/3)
所以以下代码:
Function cube(ByVal p As Double) As Double
cube = Exp(Log(p) / 3)
End Function
Top
4 楼AprilSong(X)回复于 2004-12-01 22:14:35 得分 30
没这么麻烦吧…… - -b
8开3次方就是这样啊~
N = 8 ^ (1 / 3)
MSDN~
==============================
^运算符
用来求一个数字的某次方,次方数为 exponent 值。
语法
result = number^exponent
^ 运算符的语法具有以下几个部分:
部分 描述
result 必需的;任何数值变量。
number 必需的;任何数值表达式。
exponent 必需的;任何数值表达式。
说明
只有当 exponent 为整数值时,number 才可以为负数。在表达式中执行多个指数运算时,^ 运算符的计算顺序从左到右。
result 的数据类型通常是 Double 或包含 Double 的 Variant。但是,如果 number 或 exponent 中有一个是 Null 表达式,则 result 也是 Null。Top
5 楼leihr(秋风)回复于 2004-12-01 22:35:43 得分 0
谢了,现在就结贴!我刚才试了一下,AprilSong(X) 说的不错!多谢aohan(景升)、AprilSong(X)两位仁兄!Top




