Это зависит от того, что вы подразумеваете под "уровнем точности".
Числа с плавающей запятой имеют "обычные" (нормальные) значения, но есть и специальные, ненормальные числа.Если вы хотите узнать другие пределы, стандарт C имеет предопределенные константы:
#include <math.h>
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("%30s: %g\n", "FLT_EPSILON", FLT_EPSILON);
printf("%30s: %g\n", "FLT_MIN", FLT_MIN);
printf("%30s: %g\n", "nextafterf(0.0, 1.0)", nextafterf(0.0, 1.0));
printf("%30s: %g\n", "nextafterf(1.0, 2.0)-1", (nextafterf(1.0, 2.0) - 1.0f));
puts("");
printf("%30s: %g\n", "DBL_EPSILON", DBL_EPSILON);
printf("%30s: %g\n", "DBL_MIN", DBL_MIN);
printf("%30s: %g\n", "nextafter(0.0, 1.0)", nextafter(0.0, 1.0));
printf("%30s: %g\n", "nextafter(1.0, 2.0)-1", (nextafter(1.0, 2.0) - 1.0));
puts("");
printf("%30s: %Lg\n", "LDBL_EPSILON", LDBL_EPSILON);
printf("%30s: %Lg\n", "LDBL_MIN", LDBL_MIN);
printf("%30s: %Lg\n", "nextafterl(0.0, 1.0)", nextafterl(0.0, 1.0));
printf("%30s: %Lg\n", "nextafterl(1.0, 2.0)-1", (nextafterl(1.0, 2.0) - 1.0));
return 0;
}
Вышеприведенная программа печатает 4 значения для каждого типа:
- разница между 1 инаименьшее значение больше 1 в этом типе ( TYPE
_EPSILON
), - минимальное положительное нормализованное значение для данного типа ( TYPE
_MIN
).Сюда не входят субнормальные числа , - минимальное положительное значение для данного типа (
nextafter
*(0
... )
).Это включает в себя субнормальные числа, - минимальное число больше 1. Это то же самое, что и TYPE
_EPSILON
, но рассчитывается по-другому.
В зависимости от того, что вы подразумеваете под «точностью», вам может пригодиться любое из перечисленного или ничего из этого.
Вот вывод этой программы на моем компьютере:
FLT_EPSILON: 1.19209e-07
FLT_MIN: 1.17549e-38
nextafterf(0.0, 1.0): 1.4013e-45
nextafterf(1.0, 2.0)-1: 1.19209e-07
DBL_EPSILON: 2.22045e-16
DBL_MIN: 2.22507e-308
nextafter(0.0, 1.0): 4.94066e-324
nextafter(1.0, 2.0)-1: 2.22045e-16
LDBL_EPSILON: 1.0842e-19
LDBL_MIN: 3.3621e-4932
nextafterl(0.0, 1.0): 3.6452e-4951
nextafterl(1.0, 2.0)-1: 1.0842e-19