python 算法,模拟pow(),计算任意实数的任意次方(可为负数,小数,负小数等)

完整实现了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))

你可能感兴趣的:(python,算法,数的n次方)