题解 | #求解立方根#

求解立方根

http://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca

两种方法: 浮点数判断0一般是和espi=0.000001比较,此题精确到1位小数点,可以设置espi=0.01 1.牛顿迭代法 while (fabs(num - x * x * x) > espi) { x = (2.0 * x + num / (x * x)) / 3.0; } 2.二分法 按照正数负数区间分别二分查找 if (fabs(num) <= espi) { x = 0.0; } else if (num > 0) { if (num < 1) /* 区分数字是否大于1为了加快计算,可以不用if逻辑 */ x = bin_search(num, 0.0, 1.0); else x = bin_search(num, 1.0, 20.0); } else { if (num > -1) x = bin_search(num, -1.0, 0.0); else x = bin_search(num, -20.0, -1.0); }

double bin_search(double result, double m, double n) { double tmp = (m + n) / 2.0; double res_tmp = tmp * tmp * tmp; if (fabs(result - res_tmp) <= espi) { return tmp; } else if ((result - res_tmp) > espi) { return bin_search(result, tmp, n); } else { return bin_search(result, m, tmp); } }

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务