6

重複の可能性:
doubleの配列をゼロにするためのより高速な/優先されるmemsetまたはforループ

次のコードは、memsetを使用してすべてのビットをゼロに設定します

int length = 5;
double *array = (double *) malloc(sizeof(double)*length);
memset(array,0,sizeof(double)*length);
for(int i=0;i<length;i++)
  if(array[i]!=0.0)
    fprintf(stderr,"not zero in: %d",i);

これはすべてのプラットフォームで機能すると思いますか?

doubleデータ型は常にieee-754標準に対応していますか?

返信ありがとうございます。::filltemplateコマンドもありがとうございます。しかし、私の質問は、より二重のデータ型という意味でした。

たぶん私は純粋なcのために私の質問を書くべきでした。とにかくありがとう。

編集:コードとタグをcに変更

4

3 に答える 3

4

C99環境を使用している場合、保証は一切ありません。浮動小数点数の表現は§5.2.4.2.2で定義されていますが、それは論理的で数学的な表現にすぎません。このセクションでは、浮動小数点数がバイト単位でどのように格納されるかについても触れていません。代わりに、脚注で次のように述べています。

浮動小数点モデルは、各浮動小数点特性の説明を明確にすることを目的としており、実装の浮動小数点演算が同一である必要はありません。

さらに、§6.2.6.1は次のように述べています。

この節で述べられている場合を除いて、すべてのタイプの表現は指定されていません。

そして、その節の残りの部分では、浮動小数点型については触れられていません。

要約すると、a0.0がall-bits-zeroとして表されるという保証はありません。

于 2010-06-01T19:32:08.243 に答える
3

ポータブルではありません。ループを使用するだけです。mallocの戻り値をキャストする必要はありません。

于 2010-06-01T10:19:38.910 に答える
3

使用する::std::fill(array, array+length, 0.0);

于 2010-06-01T08:34:41.277 に答える