#include <stdio.h>
#include <math.h>

/* --------------------------------*/

double Log_Prototyp(double x)
{
	double ergebnis=1.0, y=1.0-x;
	int zaehler=44;
  
	for(zaehler=44; zaehler>1; zaehler--)
		ergebnis=ergebnis*y*(((double)(zaehler)-1.0)/(double)(zaehler))+1.0;
  
	ergebnis=(-1.0)*y*ergebnis;
  
	return(ergebnis);
  
}

/* --------------------------------*/

double Logar(double x)
{
	double ergebnis=0.0, logzwei=(-1.0)*Log_Prototyp(0.5);
  
	while(x>1.0)
	{
		x=x/2.0;
		ergebnis=ergebnis+logzwei;
	}
  
	while(x<0.5)
	{
		x=2.0*x;
		ergebnis=ergebnis-logzwei;
	} 
  
	return(ergebnis+Log_Prototyp(x));
  
  
}

/* --------------------------------*/


int main(void)
{
	double zahl, ergebnis;
 
	printf("Dieses Programm berechnet den natuerlichen Logarithmus fuer von Ihnen eingegebene Argumente.\n\
Geben Sie bitte Ihre Zahl ein: "); 
 
	scanf("%lf",&zahl);
     
	if(zahl<=0)
	{
		  printf("Unzulaessige Eingabe!\n");
		  return(1);
	}
	else
	{
		  printf("Der natuerliche Logarithmus von %lf lautet:\nTaylorpolynom mit 44 Termen auf [0.5,1],\
kombiniert mit Funktionalgleichung:\n%.13lf\
\nIn math.h implementierte log-Funktion:\n%.13lf\n", zahl, Logar(zahl), log(zahl)); 
	}
     

     
 
	return(0);
  
}
