LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <math.h>

struct __attribute__((packed)) float_t 
{
    unsigned sign : 1;
    unsigned frac :  23;
    unsigned exp : 8;
};

int main() 
{
    struct float_t f;
    float fx;
    f.sign = 1;
    f.exp = 127;
    f.frac = 6291456;
    for (int i = 0; i <= UCHAR_MAX; ++i) {
        f.frac = 6291456 + i;
        memcpy(&fx, &f, sizeof(float));
        if (!isnan(fx)) {
            printf("не хватает\n");
            return 1;
        }
        memcpy(&f, &fx, sizeof(float));
        if (f.frac - 6291456 != i) {
            printf("не хватает\n");
            return 1;
        }
    }
    printf("хватает\n");
}

Исходная версия MOPKOBKA, :

#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <math.h>

struct __attribute__((packed)) float_t 
{
    unsigned sign : 1;
    unsigned frac :  23;
    unsigned exp : 8;
};

int main() {
    struct float_t f;
    float fx;
    f.sign = 1;
    f.exp = 127;
    f.frac = 6291456;
    for (int i = 0; i <= UCHAR_MAX; ++i) {
        f.frac = 6291456 + i;
        memcpy(&fx, &f, sizeof(float));
        if (!isnan(fx)) {
            printf("не хватает\n");
            return 1;
        }
        memcpy(&f, &fx, sizeof(float));
        if (f.frac - 6291456 != i) {
            printf("не хватает\n");
            return 1;
        }
    }
    printf("хватает\n");
}