C99:使用(+0 -0.0i)初始化_complex变量的正确方法

时间:2011-05-06 16:53:48

标签: c99 complex-numbers

在C99中用float _complex静态初始化(+0 -0.0i)变量的正确方法是什么(在图像中为零和零为零)?

float _Complex a = _Complex_I * (-0.0); // this seems doesn't work
int main()
{
    printf("a = (%f %f) \t(0x%016llx)\n",crealf(a),cimagf(a), *((long long*)&a));
}

PS。我需要静态初始化,所以不能使用

  __real__ a = 0.0; __imag__ a = 0.0;

1 个答案:

答案 0 :(得分:2)

不幸的是,确实没有一个。这就是C标准在C1x中包含CMPLX宏的原因。

由于我认为您使用的是GCC,因此您可能有兴趣关注this bug。特别是,如果你不介意生活在最前沿,你可能会做类似的事情:

float _Complex a = { 0.0f, -0.0f };

(有关详细信息,请参阅4月28日Jason Merrill提交的讨论)。我不确定,但您可能还需要提交一个单独的错误请求在C前端支持此功能。