数的三次方根(二分)

题目描述

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

输入格式

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

输出格式

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

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

数据范围

−10000≤n≤10000

输入样例:
1000.00
输出样例:
10.000000

分析

题目隐藏了有序这一特点,从-1000到1000这个大范围内,寻找给定的数,使用二分能够快速得到答案

但二分的关键在于判断条件怎么写,可以通过给定的数据精度,六位,因此可以让左右区间的差的绝对值应该是>1e-7的,这个也不需要mid+1,mid-1的操作

完整代码

#include<iostream>
using namespace std;

int main()
{
    double n;
    cin>>n;
    
    double r=1000,l=-1000;
    while(r-l>1e-7)
    {
        auto mid=(l+r)/2.0;
        if(mid*mid*mid<n) l=mid;
        else r=mid;
    }
    printf("%.6lf",l);
    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、付费专栏及课程。

余额充值