Я пытаюсь узнать уровень точности для различных форматов с плавающей запятой в 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, как и ожидалось. Однако, когда я меняю замедление на удвоение или «длинное удвоение», я получаю тот же ответ, я должен получить меньшее значение, но я этого не делаю. У кого-нибудь есть идеи?