C Союз и одновременное назначение членам

В следующем коде

#include<stdio.h>
int main()
{
    union myUnion
    {
        int intVar;
        char charVar;
        float floatVar;
    };
    union myUnion localVar;
    localVar.intVar = 10;
    localVar.charVar = 'A';
    localVar.floatVar = 20.2;
    printf("%d ", localVar.intVar);
    printf("%c ", localVar.charVar);
    printf("%f ", localVar.floatVar);
}

Я понимаю, что союз может содержать только одно значение за раз. Поэтому, когда я присваиваю значение char, int будет перезаписываться, а затем, когда я назначаю floatValue, char перезаписывается. Так что я ожидал некоторых значений мусора для переменных типа int и char и 20.200000 для переменной типа float, поскольку это было последнее назначенное значение. Но следующий вывод я получаю на VS Express, а также GCC

1101109658 Ü 20.200001

не в состоянии понять, почему значение с плавающей запятой изменяется?

1 ответ

Это не имеет ничего общего с unionи float значение не изменилось.

Просто не хватает битов для представления 20.2 точно как бинарный поплавок. Но это нормально, ни у кого нет такого количества битов.

Вы должны прочитать, что каждый компьютерный ученый должен знать об арифметике с плавающей точкой.

Другие вопросы по тегам