版权声明:虽为原创,欢迎转载。 https://blog.csdn.net/m0_37655357/article/details/81834983
书中的问题是要求在误差范围内,求超越方程的解。
思路流程
程序源码:
//找出方程f(x) = 0在允许误差内的解
#include <stdio.h>
#include <math.h>
//允许的最大误差,float最多能表示小数点后6位,注意不要超过表示范围。
const float DEVIATION = 1e-5;
//解所在的可能区间
float x_left = -1.00;
float x_right = 0.00;
float my_function(float x_value);
int is_same_symbol(float x,float y);
int main(void)
{
float x_middle = (x_left + x_right)/2;
static int count_num = 0;
while (fabs(my_function(x_middle)) > DEVIATION)
{
printf("\tx%d = %f...\n", count_num, x_middle);
count_num++;
if (is_same_symbol(my_function(x_middle), my_function(x_right)) == 1)
{
x_right = x_middle; //迭代下一次判断的区间范围!!!
x_middle = (x_middle + x_left) / 2;
continue;
}
else
{
x_left = x_middle;
x_middle = (x_middle + x_right) / 2;
continue;
}
}
printf("\tFind the answer!\n");
printf("\tx%d = %f\n", count_num, x_middle);
printf("\tf(x%d) = %f\n", count_num, my_function(x_middle));
getchar();
return 0;
}
/*
** 函数表达式,返回函数值
*/
float my_function(float x_value)
{
return (float)pow(x_value, 3) - 8 * x_value - 4;
}
/*
** 判断两个数是否同号
** 同号返回1,异号返回0
*/
int is_same_symbol(float x, float y)
{
return ((x>0&&y>0)||(x<0&&y<0)) ? 1 : 0;
}
运行结果: