看数学书看到的.居然还是某年的软考程序员下午题.很轻松地写出来了,挺有意思.
// 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 ; }