You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改二分查找求平方根代码以支持任意n次方根计算?

改造二分查找代码支持任意次方根

先看修改后的完整代码:

# 获取用户输入的目标数和次方数
num = float(input('请输入要求方根的数字:'))
n = int(input('请输入要求的次方根(如2为平方根,3为立方根):'))

# 处理特殊情况:0的任何正数次方根都是0
if num == 0:
    print(f'{num}的{n}次方根是0.0')
    exit()

# 确定二分查找的初始区间
abs_num = abs(num)
x = 0.0
# 当n为偶数时,次方根非负,初始上限设为max(abs_num, 1);奇数时可以包含负数区间
if n % 2 == 0:
    if num < 0:
        print(f'负数的偶次方根没有实数解')
        exit()
    y = max(abs_num, 1.0)
else:
    # 负数的奇次方根是负数,初始区间设为负数到正数的合理范围
    x = -max(abs_num, 1.0)
    y = max(abs_num, 1.0)

ans = 0.0
# 精度阈值,可根据需要调整
epsilon = 0.0001

while abs(ans**n - abs_num) > epsilon:
    ans = (x + y) / 2.0
    current = ans**n
    if current < abs_num:
        # 如果当前n次方小于目标绝对值,说明需要增大ans(分奇偶处理方向)
        if n % 2 == 0 or ans >= 0:
            x = ans
        else:
            y = ans
    else:
        # 当前n次方大于等于目标绝对值,需要减小ans
        if n % 2 == 0 or ans >= 0:
            y = ans
        else:
            x = ans

# 处理负数的奇次方根符号
if num < 0 and n % 2 != 0:
    ans = -ans

print(f'{num}的{n}次方根是{ans}')

关键改动说明:

  • 增加次方数输入:新增获取次方数n的步骤,让用户自定义方根类型。
  • 特殊情况处理:
    • 直接返回0的方根结果,避免无效循环;
    • 提前判断负数的偶次方根,告知无实数解。
  • 调整初始查找区间:
    • 偶次方根:结果非负,区间设为[0, max(abs(num), 1)](适配大于1和小于1的数的方根特性);
    • 奇次方根:支持负数结果,区间设为[-max(abs(num), 1), max(abs(num), 1)]。
  • 替换核心运算:把原代码固定的平方运算**2替换为**n,适配任意次方计算。
  • 符号修正:对负数的奇次方根,最后给结果添加负号,保证数值正确性。

内容的提问来源于stack exchange,提问作者alla fine moriremo tutti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:35:18