История изменений
Исправление
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");
}