// ------------------------------------------------------
// force-bisector
//
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <float.h>
// ------------------------------------------------------
double A, B, C, M, N;
double func( double x)
{
return
A
* exp ( M
* x
) + B
* exp ( N
* x
) - C
; }
// -------------------------------------------------------
double ForceBiSector( double eps,
double ( * fx) ( double ) ,
int max_itera)
{
double low = - DBL_MAX;
double up = DBL_MAX;
double mid = 0.0 ;
double ylow= fx( low) , yup= fx( up) , ymid= fx( mid) ;
unsigned long long times= 0 ;
while ( fabs ( ymid
) > eps
&& times
< max_itera
) { if ( ymid * yup < 0.0 ) ylow = ymid, low= mid;
else yup = ymid, up= mid;
mid = 0.5 * ( up+ low) ;
ymid = fx( mid) ;
++ times;
}
printf ( "\n times : %u\n " , times
) ; return mid;
}
// -------------------------------------------------------
int main( )
{
const double eps= 1E-15 ;
const int max_iterator= 1000000 ;
double x0, x;
puts ( "A * e^(mx) + B * e^(nx) - C = 0 < force bisector >" ) ;
x = ForceBiSector( eps, func, max_iterator) ;
printf ( "func(x) : %.15lf\n " , func
( x
) ) ; // system("pause"); // 看不到結果, 這行加進去
return 0 ;
}
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIGZvcmNlLWJpc2VjdG9yCi8vIAojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8ZmxvYXQuaD4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRvdWJsZSBBLCBCLCBDLCBNLCBOOwpkb3VibGUgZnVuYyhkb3VibGUgeCkKewoJcmV0dXJuIAoJCUEgKiBleHAoTSp4KSArIEIgKiBleHAoTip4KSAtIEM7Cn0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkb3VibGUgRm9yY2VCaVNlY3Rvcihkb3VibGUgZXBzLAoJZG91YmxlICgqZngpKGRvdWJsZSksCglpbnQgbWF4X2l0ZXJhKQp7Cglkb3VibGUgbG93ID0gLURCTF9NQVg7Cglkb3VibGUgdXAgID0gIERCTF9NQVg7Cglkb3VibGUgbWlkID0gMC4wOwoJZG91YmxlIHlsb3c9ZngobG93KSwgeXVwPWZ4KHVwKSwgeW1pZD1meChtaWQpOwoJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzPTA7Cgl3aGlsZShmYWJzKHltaWQpID4gZXBzICYmIHRpbWVzIDwgbWF4X2l0ZXJhKXsKCQlpZih5bWlkICogeXVwIDwgMC4wKSB5bG93ID0geW1pZCwgbG93PW1pZDsKCQllbHNlIHl1cCA9IHltaWQsIHVwPW1pZDsKCQltaWQgID0gMC41ICogKHVwK2xvdyk7CgkJeW1pZCA9IGZ4KG1pZCk7CgkJKyt0aW1lczsKCX0KCXByaW50ZigiXG50aW1lcyA6ICV1XG4iLCB0aW1lcyk7CglyZXR1cm4gbWlkOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludCBtYWluKCkKewoJY29uc3QgZG91YmxlIGVwcz0xRS0xNTsKCWNvbnN0IGludCBtYXhfaXRlcmF0b3I9MTAwMDAwMDsKCWRvdWJsZSB4MCwgeDsKCglwdXRzKCJBICogZV4obXgpICsgQiAqIGVeKG54KSAtIEMgPSAwIDwgZm9yY2UgYmlzZWN0b3IgPiIpOwoJcHJpbnRmKCJpbnB1dCBBIDogIik7IHNjYW5mKCIlbGYiLCAmQSk7CglwcmludGYoImlucHV0IEIgOiAiKTsgc2NhbmYoIiVsZiIsICZCKTsKCXByaW50ZigiaW5wdXQgQyA6ICIpOyBzY2FuZigiJWxmIiwgJkMpOwoJcHJpbnRmKCJpbnB1dCBOIDogIik7IHNjYW5mKCIlbGYiLCAmTik7CglwcmludGYoImlucHV0IE0gOiAiKTsgc2NhbmYoIiVsZiIsICZNKTsKCgl4ID0gRm9yY2VCaVNlY3RvcihlcHMsIGZ1bmMsIG1heF9pdGVyYXRvcik7CgkKCXByaW50ZigieCAgICAgICA6ICUuMTVsZlxuIiwgeCk7CglwcmludGYoImZ1bmMoeCkgOiAlLjE1bGZcbiIsIGZ1bmMoeCkpOwoJLy8gc3lzdGVtKCJwYXVzZSIpOyAvLyDnnIvkuI3liLDntZDmnpwsIOmAmeihjOWKoOmAsuWOuwoJcmV0dXJuIDA7Cn0=