Ошибки, баги, вопросы - страница 3464

 

Отрицательный ноль.


 
fxsaber #:

Отрицательный ноль.

Да, ноль бывает отрицательным, что подтверждается результатом (4)

void OnStart()
{
    union U {
        double d;
        ulong  l;
    } u1 { 0/(+1.0) },
      u2 { 0/(-1.0) };          //Результат:
    Print( u1.d == u2.d ); //(3)//true
    Print( u1.l == u2.l ); //(4)//false
}

При этом сохраняется равенство (3)

 
    printf("%.9f %llX", u1.d, u1.l);  //   0.000000000 0
    printf("%.9f %llX", u2.d, u2.l);  //  -0.000000000 8000000000000000
 
Nikolai Semko #:
Сразу видно, что Вы, Алексей, не кодили ни в VS Code, ни в JetBrains

Зато у меня были женщины с другим размером. А теперь я довольствуюсь тем что осталось со мной.

Не такая уж и проблема в этих переменных.

 
JRandomTrader #:

Объединил для наглядности, все вместе:

void OnStart()
{
    union U {
        double d;
        ulong  l;
    } u1 { 0/(+1.0) },
      u2 { 0/(-1.0) };                    //Результат:
    printf("%.9f %llX", u1.d, u1.l); //(1)// 0.000000000 0
    printf("%.9f %llX", u2.d, u2.l); //(2)//-0.000000000 8000000000000000
    Print( u1.d == u2.d );           //(3)//true
    Print( u1.l == u2.l );           //(4)//false
}
 
A100 #:

Объединил, все вместе (заодно исправив у себя неточность, допущенную при последующем редактировании):

Если это структура, то "l" не инициализируется.
Или это объединение, как было в первом примере?
 
Sergey Gridnev #:
Если это структура, то "l" не инициализируется.
Или это объединение, как было в первом примере?

Да, union

Кстати - из того примера следует, что анонимные struct\union\class допустимы - там U один раз появилось и в дальнейшем не используется. Хотя в Документации прямо сказано, что анонимно нельзя, но есть противоречивый пример:

В одном случае есть ошибка при компиляции, а в другом - нет

void OnStart()
{
    enum   {     e  } x1; //(1)//нормально
    struct { int e; } x2; //(2)//Error: '{' - name expected
}

А какая принципиальная разница?

 
A100 #:
Кстати - из того примера следует, что анонимные struct\union\class допустимы - там U один раз появилось и в дальнейшем не используется.
Ну какая же она анонимная, если у неё имя "U"?
 
Sergey Gridnev #:
Ну какая же она анонимная, если у неё имя "U"?

имелось ввиду, что U можно было бы и не писать, т.е. запрет анонимности устарел

 
A100 #:

имелось ввиду, что U можно было бы и не писать, т.е. запрет анонимности устарел

С этим согласен.
Причина обращения: