使用二进制搜索在C中查找数字的平方根

LC1*_*382 3 c algorithm math

试图使用二进制搜索计算出数字的平方根,但是我的实现不起作用,我不知道为什么 - 任何帮助表示赞赏,谢谢

继承我的代码.'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;
   }
 }
Run Code Online (Sandbox Code Playgroud)

eya*_*alm 7

除了代码中的逻辑问题之外,比较浮点数也不是一个好习惯.

mid * mid == end即使对于sqrt(9),也可能总是失败,因为测试浮点数是非常困难的.

使用范围(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;
}
Run Code Online (Sandbox Code Playgroud)