朝仓太阳 发表于 2014-10-2 14:10:02

课件中二分法求平方根的问题。

以下,是按实型做的,但是首先失败得到一个明显错误的值。在调试中发现第一个x^2-y的函数(sqf)在调用到第二个二分法求近似解的函数中(square)无论变量是啥都是一个固定的随机初值大约1e8左右。求问大神求指正~~


#include<stdio.h>
#include<math.h>
#define lowerlimit 0.5
void main()
{
float square(float y);
float sqf(float x);
float a,b;
printf("Please input a natural number with single real:\n");
scanf("%f",&a);
b=square(a);
printf("The square root of %f is %f\n",a,b);
}

float sqf(float x)
{
float y;
return(y-x*x);
}

float square(float y)
{
float sqf(float x);
float e,low=lowerlimit,high=y,m,x;
if(sqf(low)==0.0)
{
    x=low;
}
else if(sqf(high)==0.0)
{
    x=high;
}
else
{
   do
   {
   m=(low+high)/2;
         if(sqf(m)==0.0)
         {
         x=m;
         break;
         }
         else if(sqf(low)*sqf(high)<0)
         {
         high=m;
         }
         else
         {
         low=m;
         }
         e=high-low;
   }
   while(fabs(e)>=0.0001);
   {
         x=(low+high)/2;
   }
}
return(x);
}

以上,是按实型做的,但是首先失败得到一个明显错误的值。在调试中发现第一个x^2-y的函数(sqf)在调用到第二个二分法求近似解的函数中(square)无论变量是啥都是一个固定的随机初值大约1e8左右。求问大神求指正~~

943339665 发表于 2015-4-8 18:40:46

return(y-x*x)我没看懂是什么意思。
float sqf(float x)
{
float y;
return(y-x*x);
}实参传递给形参的是a->x,y的值未知,y-x*x当然也未知,返回一个未知的数再去参与运算,当然结果也未知啊。
页: [1]
查看完整版本: 课件中二分法求平方根的问题。