Пытаясь написать код для поиска машинного эпсилон

Я пытаюсь узнать уровень точности для различных форматов с плавающей запятой в C ( т.е. float, double и long double). Вот код, который я использую сейчас:

#include <stdio.h>
#define N 100000

int main(void)
{
   float max = 1.0, min = 0.0, test;
   int i;                              /* Counter for the conditional loop */

   for (i = 0; i < N; i++) {
      test = (max + min) / 2.0;
      if( (1.0 + test) != 1.0)         /* If too high, set max to test and try again */
     max = test;
  if( (1.0 + test) == 1.0)     /* If too low, set min to test and try again */
         min = test;
   }
   printf("The epsilon machine is %.50lf\n", max);
   return 0;
}

Это дает значение примерно ~ 2 ^ -64, как и ожидалось. Однако, когда я меняю замедление на удвоение или «длинное удвоение», я получаю тот же ответ, я должен получить меньшее значение, но я этого не делаю. У кого-нибудь есть идеи?

5
задан mskfisher 12 June 2012 в 12:40
поделиться