第26760题
有关以下二分法求平方根的代码的说法,错误的是哪一项?
def sqrt_binary(n, epsilon=1e-10):
    if n < 0:
        raise ValueError("输入必须为非负整数")
    if n == 0 or n == 1:
        return n

    # 阶段1:
    low, high = 1, n
    k = 0
    while low <= high:
        mid = (low + high) // 2
        mid_sq = mid * mid
        if mid_sq == n:
            return mid
        elif mid_sq < n:
            k = mid
            low = mid + 1
        else:
            high = mid - 1

    next_k = k + 1
    next_sq = next_k * next_k
    if next_sq == n:
        return next_k

    # 阶段2:
    low_float, high_float = float(k), float(k + 1)

    while high_float - low_float >= epsilon:
        mid = (low_float + high_float) / 2
        mid_sq = mid * mid

        if mid_sq < n:
            low_float = mid
        else:
            high_float = mid

    # 浮点数阶段后的最终结果
    result = (low_float + high_float) / 2

    check_int = int(result + 0.5)
    if check_int * check_int == n:
        return check_int

    return result

#测试示例
print(sqrt_binary(16))  # 输出: 4
print(sqrt_binary(17))  # 输出: ≈4.123
print(sqrt_binary(10**14)) # 输出: 10000000
A

“阶段1”的目标是寻找正整数n可能的正完全平方根

B

“阶段2”的目标是如果正整数n没有正完全平方根,则在可能产生完全平方根附近寻找带小数点的平方根

C

代码check_int = int(result + 0.5)是检查因浮点误差是否为正完全平方根

D

对巨大数求平方根,本算法同样适用。