得到sqrt函数的小错误

时间:2013-12-05 23:27:55

标签: c error-handling

我正在编写这个程序来查找数字的平方根。在定义函数mysqrt()时。我正在使用Newton-Raphson方法。在if()中我使用fabs(blah data blah)<相对误差EX为0.001。如果误差小于.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 个答案:

答案 0 :(得分: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

在纸上进行简化,它将使您的程序更具可读性,并且更容易发现错误。