完整实现了python 中 pow、** 功能的函数pow函数。
它可以计算任意实数的任意次方(可为负数,小数,负小数等)
若对其中的 n > 0 and n < 1 条件下使用了牛顿迭代法可以参考 https://blog.csdn.net/zw17302560727/article/details/102795921
def fun(num, n):
'''
求num的 0-1间的小数次方 和 正整数次方
'''
if n > 0 and n < 1:
# 牛顿迭代法 推演出来的求 n 次方根(n为正整数)
n = 1 / n
guess = num / 2.0
last = 0.0
while abs(guess - last) >= 0.0001:
last = guess
guess = ((n -1) * guess + num / (fun(guess, n - 1))) / n # guess ** (n - 1)
return guess
elif n >= 1:
if n == 1:
return num
if n == 2:
return num * num
if n % 2 ==0:
return fun(fun(num, n / 2), 2)
else:
return fun(fun(num, n // 2), 2) * num
def pow(num, n):
'''
注意 num 和 n不要不分
num 天然可以为所有的浮点数
这里要区分的时n
'''
# 判断是否为负号
isminus = False
if n < 0:
isminus = True
n = abs(n)
if n == 0:
result = 1
else:
# 小数走这个if
if n > 0 and n < 1:
result = fun(num, n)
# 大于1的整数走这个elif
elif isinstance(n ,int):
result = fun(num, n)
# 大于1的浮点数走这个elif
elif n > 1:
result = fun(num, int(n)) * fun(num, n - int(n))
if isminus:
return 1 / result
else:
return result
if __name__ == '__main__':
print(pow(2, -10.1))
版权声明:本文为zw17302560727原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。