尝试使用二进制搜索计算数字的平方根,但是我的实现不起作用,我不确定为什么 - 感谢任何帮助,谢谢
这是我的代码。 'end' 是我想要平方根的数字的值
while(start <= end) {
float mid = ((start + end) / 2);
printf("\nhalving mid");
if(mid * mid == end){
sqrt = mid;
printf("\nsqrt = %d", sqrt);
}
if(mid * mid < end){
start = mid + 1;
sqrt = mid;
printf("\nsqrt: %d", sqrt);
}
else{
start = mid - 1;
}
}
最佳答案
除了代码中的逻辑问题之外,比较 float 也不是一个好的做法。
mid * mid == end
可能总是会失败,即使是 sqrt(9) 因为 it is very difficult to test floating-point numbers for equality .
使用范围 (epsil) 而不是比较来查看此实现:
static float my_sqrt(float num)
{
double start = 0.0;
double end = num;
double sqrt = 0.0;
double epsil = 0.000001;
while (start <= end)
{
double mid = ((start + end) / 2);
sqrt = mid;
printf("sqrt = %f\n", sqrt);
if (fabs(mid * mid -num) <= epsil)
{
break;
}
else if (mid * mid < num)
{
start = mid;
}
else
{
end = mid;
}
}
return sqrt;
}
关于c - 使用二进制搜索在 C 中查找数字的平方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40849402/