# include # include # include # define MAX_STEPS 1000000 int main ( int argc, char **argv ) { long int _steps; long double steps; /* for speed, comparision between the same types is * faster */ long double i, j; register long double sum = 0; if ( argc <= 1 || ( _steps = atoi ( argv[1] ) ) <= 0 ) { printf ( "Bitte Anzahl Schritte eingeben: " ); _flushlbf (); scanf ( "%ld", &_steps ); } if ( _steps < 0 || _steps > MAX_STEPS ) { _steps = MAX_STEPS; printf ( "Die eingegebene Zahl ist zu groß, nehme %d an!\n", MAX_STEPS ); } steps = ( long double ) _steps + 1.0; for ( i = 1.0, j = 2.0; i < steps; i ++, j *= 2.0 ) sum += i / j; printf ( "\ bei %ld %s ist die Summe von\n\ 1/2 + 2/4 + 3/8 + 4/16 + ... gleich\n\ %.30Lf\n", _steps, ( _steps == 1 ) ? ( "Schritt" ) : ( "Schritten" ), sum ); return 0; }