查找数字的近似平方根

时间:2014-09-06 04:53:29

标签: c square-root

这是我编写的代码,用于查找约平方根非完美数字(按0.0001的顺序以及完美正方形的精确平方根。它使用非完美的正方形数字但是并不完美。当我把25分给出5.000068

#include<stdio.h>
int main()
{
    float a,i,count;
    scanf("%f",&a);

    for(count=1;(1);count=count+0.0001)
    {
        i=count*count;
        if (i<=a)
        break;
    }
    printf("%f",count);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

你的方法计算平方根是错误的。

你不值得读square roots。了解问题是任何软件开发的第一步。

首先,您应该阅读The Floating Point Guide和经典每个程序员应该知道的关于浮点运算的内容。它解释了为什么你的程序无法工作(即给出不准确的结果)。

然后,你的程序效率非常低(对于数十亿的大输入数字,它需要大量的计算时间;对于非常小的数字,如0.01,它可能永远不会终止)。通过阅读一些基本的数学书来了解Newton-Raphson's method

请注意,许多fixpoint计算转换为迭代算法。

答案 1 :(得分:1)

您的代码有两个问题:

浮点不准确。如果您想要更准确,请使用double,而不是float

您的增量值太大。如果您增加一个较小的数量,您将(或应该)获得所需的值:请参见此处:http://ideone.com/7XM2IK

下一个问题现在不会影响您的代码,但无论如何都会收到警告:

不要将浮点运算用作循环计数器。要解决此问题,请将循环规范化以执行整数计数,并在循环内执行浮点操作:

int count;
float dCount = 1.0;
float i, a;
//...
for (count=0; count < 100000; ++count)
{
   //...
}

请参阅此链接:https://www.securecoding.cert.org/confluence/display/java/NUM09-J.+Do+not+use+floating-point+variables+as+loop+counters

答案 2 :(得分:1)

如果你不想与书籍和数学斗争:

#include <stdio.h>
#include <math.h>
int main()
{
  float n = 25;// ofc use scanf xD

  n=sqrt(n);

  printf("%.5f", n);


return 0;
}