java - Cube Root 使用迭代和二分法
问题描述
我试图通过二等分然后缩小它来找到一个数字的立方根。我以这种方式有平方根的程序,但立方根方法只是继续循环并且永远不会给出答案。我不确定我哪里出错了,需要一些建议。
public class myFunc
{
public static double squareRoot(double value, double precision)
{
double low, high, middle;
high = 1;
low = value;
middle = (high + low) / 2;
Console.WriteLine("{0,20:n12}{1,20:n12}{2,20:n12}", low, middle, high);
while ((high-low)>precision)
{
if ((middle * middle) <value)
{
low = middle;
}
else
{
high = middle;
}
middle = (high + low) / 2;
Console.WriteLine("{0,20:n12}{1,20:n12}{2,20:n12}", low, middle, high);
}
return (middle);
}
public static double cubeRoot(double value, double precision)
{
double low, high, middle;
high = value;
low = 1;
middle = (high + low) / 3;
Console.WriteLine("{0,20:n12} {1,20:n12} {2,20:n12}", low, middle, high);
while ((high - low) > precision)
{
if ((middle * middle*middle)>value)
{
high = middle;
}
else
{
low = middle;
}
middle = (high + low) / 3;
Console.WriteLine("{0,20:n12} {1,20:n12} {2,20:n12}", low, middle, high);
}
return (middle);
}
解决方案
middle = (high + low) / 3;
假设高是10,低是8,中间是...... 6?这不是超出你想要的范围吗?
中间应该仍然是(high + low) / 2
,搜索第三根的只是(middle * middle*middle)>value
测试。
推荐阅读
- python - 通过部分匹配 r 中的另一个数据帧来对数据帧进行子集化(对 python/pandas 解决方案开放)
- java - Maven 不运行单元测试 - 方法名称约定
- javascript - Jinja 模板未在 javascript 中正确呈现 Date 对象
- javascript - 使用 TypeScript 动态加载文件?
- java - 如何使用 AWS STS 为 s3 中的文件的特定资源创建只读和只写令牌
- c++ - 致命错误:unordered_map:没有这样的文件或目录(C++ 98,gcc 4.8.5,使用 CMAKE)
- javascript - 为什么 `export default` 会导出带有 `default` 的对象而不是对象本身?
- javascript - 使用 json 时无法将属性“innerHTML”设置为 null
- java - 如何对 MultiValuedMap 中包含的 Doubles 的 ArrayList 进行排序
- java - Android:如何使用 CountDownLatch?