首页 文章

得到sqrt函数的小错误

提问于
浏览 21
-1

我正在编写这个程序来查找数字的平方根 . 在定义函数mysqrt()时 . 我正在使用Newton-Raphson方法 . 在if()中我使用fabs(blah data blah)<0.001表示相对错误EX . 如果误差小于.1%,答案是正确的 . 当我编译下面的代码时

我得到错误第27行:调用对象'5.0e-1'不是函数 .

我完全不知道它是指什么 . 请帮忙谢谢 .

我知道有一个sqrt()函数,但这是一个额外的信用分配我已经写了大部分,但无法纠正这个错误 .

#include <stdio.h>
    #include <math.h>

    double mysqrt(double a);

    int main()
    {
     double a, result;

     printf("Enter a number to find the square root of: ");
     scanf("%d", &a);

     result = mysqrt(a);

     printf("The square root of %d is %d \n", a, result);
    }


    double mysqrt(double num)
    {
     double x, new_x;
     if((fabs(((x+1) - x)/(x+1)))<0.001)
     {
      for(x=2; x != num;)
      {
       new_x=(x+1);
       new_x=(0.5(x+(num/x)));
       x=new_x;
      }
     }
        else
       {
        return new_x;
       }
    }

1 回答

  • 3

    你在这里忘了乘法符号:

    new_x=(0.5(x+(num/x)));
    

    这是一个非常常见的错误,当你看到“......不是一个函数”时,它意味着你所拥有的某个地方......()通常是一个被遗忘的乘法 .

    你的程序很难读,因为有很多括号,为什么不写:

    new_x = 0.5 * (x + num/x);
    

    另外,这个:

    (fabs(((x+1) - x)/(x+1))) < 0.001
    

    相当于:

    fabs(1/(x+1)) < 0.001
    

    在纸上进行简化,它将使您的程序更易读,更容易发现错误 .

相关问题