#include "stdio.h"
/*************************************************************************
* 函数名称:abs_float
* 功能说明:求绝对值
* 参数说明:dataIn 输入数据
* 函数返回:绝对值
* 修改时间:2021年01月08日
* 备 注:
*************************************************************************/
float abs_float(float dataIn)
{
return (dataIn>=0)?dataIn:(-dataIn);
}
/*************************************************************************
* 函数名称:my_sqrt
* 功能说明:开方
* 参数说明:dataIn 输入数据
* 参数说明:acc 精度
* 函数返回:绝对值
* 修改时间:2021年01月14日
* 备 注:
*************************************************************************/
float my_sqrt(float DataIn)
{
#define X2_DataIn(x) (x*x-DataIn)
#define my_sqrt_acc 1e-6
float start;
float end;
float mid;
if(DataIn<0) return -1;
if(DataIn==0) return 0;
if(DataIn==1) return 1;
if(DataIn<1)
{
start = DataIn;
end = 1;
}
else if(DataIn>1)
{
start = 1;
end = DataIn;
}
mid = start + (end - start) / 2.0;
while(abs_float(start - mid) > my_sqrt_acc)
{
if(X2_DataIn(mid)==0)
return mid;
else if(X2_DataIn(mid)*X2_DataIn(start)<0)
end = mid;
else
start = mid;
mid = start + (end - start) / 2.0;
}
return mid;
}
/*************************************************************************
* 函数名称:main
* 功能说明:主函数
* 参数说明:无
* 函数返回:0
* 修改时间:2021年01月14日
* 备 注:
*************************************************************************/
int main(void)
{
float a[10] = {0, 1, 0.25, 2, 3, 5, 7, 0.18, 0.04, 25};
int i;
for(i=0; i<10; i++)
{
printf("%f\n", my_sqrt(a[i]));
}
return 0;
}
相关文章: