1

C99で(実数では正のゼロ、imagでは負のゼロ)で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;
4

1 に答える 1

2

残念ながら、実際にはありません。これが、C 標準CMPLXに C1x のマクロが含まれている理由です。

GCC を使用していると思われるので、このバグを追跡することに興味があるかもしれません。特に、最前線での生活を気にしないのであれば、次のようなことができるかもしれません:

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

(詳細については、4 月 28 日の Jason Merrill のコミットに関する議論を参照してください)。確かではありませんが、C フロント エンドでのこの機能のサポートを要求する別のバグを提出する必要がある場合もあります。

于 2011-05-06T17:50:05.603 に答える