看数学书看到的.居然还是某年的软考程序员下午题.很轻松地写出来了,挺有意思.
// solveEquation.cpp -- 2011-07-19-01.05
#include <iostream>
#include <cmath>
double absoluteValue (const double valA, const double valB) ;
double equation (const double x) ;
double solveEquation (double (* pEquation) (const double x), const double leftEndian, const double rightEndian, const double precision) ;
double absoluteValue (const double vlaA, const double valB) ;
int main (void)
{
double leftEndian = 2.0, rightEndian = 3.0 ;
double precision = 0.01 ;
std ::cout << "Result is : " << solveEquation(equation, leftEndian, rightEndian, precision) << std ::endl ;
return 0 ;
}
double absoluteValue (const double valA, const double valB)
{
if (valA > valB)
return valA - valB ;
else
return valB - valA ;
}
double equation (const double x)
{
return 3 - log10(x) ;
}
double solveEquation (double (* pEquation) (const double x), const double leftEndian, const double rightEndian, const double precision)
{
double a = leftEndian, b = rightEndian ;
double bisection ;
do
{
bisection = (a + b) / 2 ;
double tempValue = (* pEquation)(bisection) ;
if ((* pEquation)(a) * tempValue < 0)
b = bisection ;
else if ((* pEquation)(b) * tempValue < 0)
a = bisection ;
else
break ;
}
while (absoluteValue(a, b) >= precision)
;
return bisection ;
}