Я хочу напрямую вычислить минимальное значение типа float
, и вот мой алгоритм (предположим, что кодирование числа с плавающей запятой подтверждает стандарт IEEE 754):
#include <math.h>
#include <limits.h>
#include <float.h>
#include <stdio.h>
float float_min()
{
int exp_bit = CHAR_BIT * sizeof(float) - FLT_MANT_DIG;
float exp = 2 - pow(2, exp_bit - 1);
float m = pow(2, -(FLT_MANT_DIG - 1));
return m * pow(2, exp);
}
int main()
{
printf("%g\n", float_min());
}
Выходной сигнал 1.4013e-45
. Однако, я считаю, что значение FLT_MIN
в C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\float.h
равно 1.175494351e-38F
. Кто не прав?