C99: может ли мнимая часть комплекса быть отрицательным нулем

Можно ли сохранить отрицательный ноль в мнимой части комплексного числа с плавающей запятой C99?

Как мне статически инициализировать комплексные константы с мнимой частью со знаком?

У меня есть небольшой пример, но я не могу понять, почему a и c одинаковы и почему -std = c99 меняет результаты.

$ cat zero1.c
int main() {
    float _Complex a;a = 0.0 + (__extension__ 0.0iF);
    float _Complex b;b = 0.0 + (__extension__ -0.0iF);
    float _Complex c;c = -0.0 + (__extension__ 0.0iF);
    float _Complex d;d = -0.0 + (__extension__ -0.0iF);
    printf("a= 0x%016llx\n", *(long long*)(&a));
    printf("b= 0x%016llx\n", *(long long*)(&b));
    printf("c= 0x%016llx\n", *(long long*)(&c));
    printf("d= 0x%016llx\n", *(long long*)(&d));
}

$ gcc-4.5.2 -w -std=c99 zero1.c ; ./a.out
a= 0x0000000000000000
b= 0x0000000000000000
c= 0x0000000000000000
d= 0x0000000080000000

$ gcc-4.5.2 -w zero1.c ; ./a.out
a= 0x0000000000000000
b= 0x8000000000000000
c= 0x0000000000000000
d= 0x8000000080000000

Цитаты из C99-TC3 и gcc руководства приветствуются.

Я не могу найти ничего подходящего ни в C99 (n1256.pdf), ни в http://www.knosof.co.uk/cbook/

7
задан kiamlaluno 17 January 2013 в 07:04
поделиться