on my machine (fedora core 5) there are definitions in

./usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include/float.h

   /* Difference between 1.0 and the minimum double greater than 1.0 */
#undef DBL_EPSILON
#define DBL_EPSILON 2.2204460492503131e-16



but not in

./usr/lib/gcc/i386-redhat-linux/4.1.0/include/float.h

where it appears as:

/* The difference between 1 and the least value greater than 1 that is
   representable in the given floating point type, b**1-p.  */
#undef FLT_EPSILON
#undef DBL_EPSILON
#undef LDBL_EPSILON
#define FLT_EPSILON     __FLT_EPSILON__
#define DBL_EPSILON     __DBL_EPSILON__
#define LDBL_EPSILON    __LDBL_EPSILON__


You can also calculate them yourself:

//##############################################################################
double d_macheps()
  {
    double eps = 1.0;
    int counter = 1;
    while ( ((double) 1.0 + eps) > ((double) 1.0) )
      {
        eps = eps/2.0;
        counter++;
//        ::printf("eps = %.16e   counter = %7d \n",eps,counter);
      }
    eps = eps*2.0;
    counter--;
//    ::printf("\n double macheps = %.20e  at counter = %d \n",eps,counter);

    return eps;
  }



Of course on x86 machines all floats, doubles and long doubles get promoted to long double (inside the CPU) so from the above calculation you will get macheps for long double. This might be OK , but one has to be carefull....

Boris




Peter Jay Salzman wrote:
Where is DBL_EPSILON defined?  I thought it was in float.h.  But I've looked
at float.h in:

   /usr/lib/gcc-lib/i486-linux-gnu/3.3.6/include
   /usr/lib/gcc/i486-linux-gnu/3.4.6/include

and neither one actually defined it.

Where is the numerical value held?
_______________________________________________
vox-tech mailing list
[email protected]
http://lists.lugod.org/mailman/listinfo/vox-tech

_______________________________________________
vox-tech mailing list
[email protected]
http://lists.lugod.org/mailman/listinfo/vox-tech

Reply via email to