#include <stdio.h>


float min_float(){
   float a=1,d=0.5,b;
   while (1){
      b=a*(1-d);
      printf("%e = %e*(1-%e)\n",b,a,d);
      if (b==a)
         return b;
      if (b==0)
         d*=0.5;
      else
         a=b;
   }
   return b;
}

double min_double(){
   double a=1,d=0.5,b;
   while (1){
      b=a*(1-d);
      // printf("%e = %e*(1-%e)\n",b,a,d);
      if (b==a)
         return b;
      if (b==0)
         d*=0.5;
      else
         a=b;
   }
   return b;
}

long double min_extended(){
   long double a=1,d=0.5,b;
   while (1){
      b=a*(1-d);
      // printf("%Le = %Le*(1-%Le)\n",b,a,d);
      if (b==a)
         return b;
      if (b==0)
         d*=0.5;
      else
         a=b;
   }
   return b;
}

int main()

{

   printf("float: %e \n",min_float());
   printf("double: %e \n",min_double());
   printf("long double: %Le \n",min_extended());
   return 0;
}
