数的三次方根(经典二分)

数的三次方根

给定一个浮点数 n,求它的三次方根。

输入格式

共一行,包含一个浮点数 n。

输出格式

共一行,包含一个浮点数,表示问题的解。

注意,结果保留 6 位小数。

数据范围

−10000≤n≤10000

输入样例:

1000.00

输出样例:

10.000000

算法:二分

注意,题目要求保留多少位小数(这里我们设为n),最少写成 r - l > 1e-(n+2),这要可以满足得到更高的精度,而且最后输出的时候最好输出r(虽然l与r是一样的)但输出l会出现精度丢失的问题,血的教训。。。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;

int main()
{
    double n;
    cin >> n;
    double l = -10000, r = 10000;
    while(r - l > 1e-8)
    {
        double mid = (l + r) / 2;
        if(mid * mid * mid >= n) r = mid;
        else l = mid;
    }
    printf("%lf", r);
    return 0;
}
### Python 实现二分三次方根 为了使用二分法计算给定值 \( n \)三次方根,在 Python 中可以定义一个 `cbrt_bisect` 来执行此操作。该方法基于不断缩小可能包含实际立方根的区间直到达到所需的精度。 #### 完整代码示例: ```python def cbrt_bisect(value, epsilon=1e-8): """ 使用二分查找算法计算给定值 value 的近似立方根: value (float): 要找到其立方根的目标. epsilon (float): 结果允许的最大误差范围,默认为 1e-8. 返回: float: 给定值 value 的近似立方根. """ if value == 0: return 0 sign = -1 if value < 0 else 1 abs_value = abs(value) low = min(-1.0, abs_value) high = max(1.0, abs_value) while True: guess = (low + high) / 2 error = guess ** 3 - abs_value if abs(error) <= epsilon: break elif error > 0: high = guess else: low = guess return sign * guess # 测试例子 test_values = [-27, -8, -1, 0, 1, 8, 27] for val in test_values: result = cbrt_bisect(val) print(f"cbrt({val}) ≈ {result:.6f}") ``` 上述程序首先处理特殊情况即当输入值等于零的情况;接着判断传入参是否小于零以便后续调整符号;最后设置初始上下限并进入循环逐步逼近真实解直至满足指定精确度条件为止[^3]。 对于负情况,由于实范围内不存在负的偶次幂平方根,但对于奇次幂如这里讨论的立方根,则可以通过取绝对值得到正的结果再乘上相应的符号得到最终答案[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值