#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#define EPSILON (1e-12)
int verbose=0;
double func( double x ) /* 解く方程式 */
{
}
double diff( double x ) /*導関数 */
{
}
void iterate( double x0, int n )
{
double y0, x, y, delta;
y0 = func(x0);
x = x0 + ( delta = - y0 / diff( x0 ) ); /* 接線の x 切片 */
if (n++ > 100) {
printf( "Too Many Recursions\n" ); return;
}
y = func(x);
if (verbose) {
printf( "%03d> %20.14lf %16.1le %10.1le\n", n
, x
, delta
, y
); }
if (y == 0) {
printf( "Ans(%03d): %20.14lf %16.1le %10.1le %10.1le\n", n, x, func(x*(1-EPSILON)), y, func(x*(1+EPSILON)) );
} else if (fabs(delta
) < fabs(x
)*EPSILON
) { printf( "Ans(%03d): %20.14lf %16.1le %10.1le %10.1le\n", n, x, func(x*(1-EPSILON)), y, func(x*(1+EPSILON)) );
} else {
iterate( x, n );
}
}
int main (int argc, char **argv) {
double x, y;
double xfrom, xto;
int xsteps, xidx;
char ch;
while (( ch = getopt(argc,argv,"v")) != -1 ) {
if ( ch == 'v' ) { verbose = 1; }
}
scanf( "%lf %lf %d", &xfrom
, &xto
, &xsteps
);
for( xidx=0; xidx<=xsteps; xidx++ ) {
x = (xfrom * (xsteps - xidx) + xto * xidx) / xsteps;
if ((y = func(x)) == 0) {
printf( "Ans(%03d): %20.14lf %16.5le %12.5le %12.5le\n", 0, x, func(x*(1-EPSILON)), y, func(x*(1+EPSILON)) );
} else {
if (verbose) {
printf( "%03d> %20.14lf\n", 0, x
); }
iterate( x, 0 );
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8bWF0aC5oPgoKI2RlZmluZQlFUFNJTE9OCSgxZS0xMikJCQkKCmludCB2ZXJib3NlPTA7CQkJCQkKCmRvdWJsZSBmdW5jKCBkb3VibGUgeCApCQkJCS8qIOino+OBj+aWueeoi+W8jyAqLwp7CiAgcmV0dXJuIHNpbih4KSAtIDAuMjsKfQoKCmRvdWJsZSBkaWZmKCBkb3VibGUgeCApCQkJCS8q5bCO6Zai5pWwICovCnsKICByZXR1cm4gY29zKHgpOwp9CgoKdm9pZCBpdGVyYXRlKCBkb3VibGUgeDAsIGludCBuICkJCQp7CiAgZG91YmxlICB5MCwgeCwgeSwgZGVsdGE7CgogIHkwID0gZnVuYyh4MCk7CiAgeCA9IHgwICsgKCBkZWx0YSA9IC0geTAgLyBkaWZmKCB4MCApICk7CS8qIOaOpee3muOBriB4IOWIh+eJhyAqLwogIGlmIChuKysgPiAxMDApIHsJCQkJCiAgICBwcmludGYoICJUb28gTWFueSBSZWN1cnNpb25zXG4iICk7CiAgICByZXR1cm47CiAgfQoKICB5ID0gZnVuYyh4KTsKCiAgaWYgKHZlcmJvc2UpIHsJCQkJCiAgICBwcmludGYoICIlMDNkPiAlMjAuMTRsZiAlMTYuMWxlICUxMC4xbGVcbiIsIG4sIHgsIGRlbHRhLCB5ICk7CiAgfQoKICBpZiAoeSA9PSAwKSB7CiAgICBwcmludGYoICJBbnMoJTAzZCk6ICUyMC4xNGxmICUxNi4xbGUgJTEwLjFsZSAlMTAuMWxlXG4iLAoJICAgIG4sIHgsIGZ1bmMoeCooMS1FUFNJTE9OKSksIHksIGZ1bmMoeCooMStFUFNJTE9OKSkgKTsKICB9IGVsc2UgaWYgKGZhYnMoZGVsdGEpIDwgZmFicyh4KSpFUFNJTE9OKSB7CQogICAgcHJpbnRmKCAiQW5zKCUwM2QpOiAlMjAuMTRsZiAlMTYuMWxlICUxMC4xbGUgJTEwLjFsZVxuIiwKCSAgICBuLCB4LCBmdW5jKHgqKDEtRVBTSUxPTikpLCB5LCBmdW5jKHgqKDErRVBTSUxPTikpICk7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdGUoIHgsIG4gKTsKICB9Cn0KCgppbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgZG91YmxlICB4LCB5OwogIGRvdWJsZSAgeGZyb20sIHh0bzsKICBpbnQJICB4c3RlcHMsIHhpZHg7CiAgY2hhciAgICBjaDsKCiAgd2hpbGUgKCggY2ggPSBnZXRvcHQoYXJnYyxhcmd2LCJ2IikpICE9IC0xICkgewkKICAgIGlmICggY2ggPT0gJ3YnICkgeyB2ZXJib3NlID0gMTsgfQkJCQogIH0KICAKICBwcmludGYoIng6IGZyb20gdG8gc3RlcHM+ICIpOwogIHNjYW5mKCAiJWxmICVsZiAlZCIsICZ4ZnJvbSwgJnh0bywgJnhzdGVwcyApOwogIAogIGZvciggeGlkeD0wOyB4aWR4PD14c3RlcHM7IHhpZHgrKyApIHsKICAgIHggPSAoeGZyb20gKiAoeHN0ZXBzIC0geGlkeCkgKyB4dG8gKiB4aWR4KSAvIHhzdGVwczsKICAgIGlmICgoeSA9IGZ1bmMoeCkpID09IDApIHsKICAgICAgcHJpbnRmKCAiQW5zKCUwM2QpOiAlMjAuMTRsZiAlMTYuNWxlICUxMi41bGUgJTEyLjVsZVxuIiwKCSAgICAgIDAsIHgsIGZ1bmMoeCooMS1FUFNJTE9OKSksIHksIGZ1bmMoeCooMStFUFNJTE9OKSkgKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmICh2ZXJib3NlKSB7CglwcmludGYoICIlMDNkPiAlMjAuMTRsZlxuIiwgMCwgeCApOwogICAgICB9CiAgICAgIGl0ZXJhdGUoIHgsIDAgKTsKICAgIH0KICB9CgogIHJldHVybiAwOwp9