这是我编写的代码,用于查找约平方根非完美数字(按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;
}
答案 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)
{
//...
}
答案 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;
}