Ограничения для типов с плавающей запятой? - PullRequest
3 голосов
/ 24 января 2011
#include <stdio.h>
#include <limits.h>

int main(void){
        printf("Type                Size      Min                 Max\n----------------------------------------------------------------------\n");
        printf("%-20s%-10d%-20ld%-20ld\n", "long", sizeof(long), LONG_MIN, LONG_MAX);
        printf("%-20s%-10d%-20lu%-20lu\n", "unsigned long", sizeof(long), 0, ULONG_MAX);
        return 0;
}

где двойник?т.е. переменная LONG_MIN находится в файле limit.h.в каком типе double?

   int i, min, max;

    for (i = 1.0; i > 0; ++i)
    {
        max = i;
    };
    min = i;
    printf ("int: min: %d max: %d \n", min, max);

как сделать для float и double?как мин рассчитал эту переменную?извините, плохой английский

Ответы [ 4 ]

15 голосов
/ 24 января 2011

Пределы для типов с плавающей точкой определены в float.h not limit.h

8 голосов
/ 24 января 2011

в Linux, у меня есть float.h, в котором FLT_MAX и DBL_MAX определены для максимального значения float и double соответственно.Я не уверен, насколько это "стандарт", хотя ...

0 голосов
/ 24 января 2011

Чтобы вычислить ограничения для данного типа данных, вы должны просто вычислить (2^(sizeof(type) * 8)) - 1, то есть (2^number_of_bits) - 1.

Тогда, если вы считаете этот тип подписанным, минимальное и максимальное значения равны -2^(number_of_bits - 1) и (2^(number_of_bits - 1)) - 1 или если они не подписаны, MIN будет 0 и MAX (2^number_of_bits) - 1.

Это применимо только к целочисленным типам, но не для чисел с плавающей точкой и двойных чисел, а затем только для целочисленных представлений дополнения Two.

0 голосов
/ 24 января 2011

Я думаю, это то, что вы хотите:

float:% f

long float (double):% lf

Возможно, вы также захотите увидеть его в экспоненциальной записи:% E

Для мин / макс для чисел с плавающей запятой и двойного вот что вы хотите

Вот фрагмент из float.h:

#define DBL_MAX 1.7976931348623158e+308 /* max value */
#define DBL_MIN 2.2250738585072014e-308 /* min positive value */

#define FLT_MAX 3.402823466e+38F /* max value */
#define FLT_MIN 1.175494351e-38F /* min positive value */
...