1

標準では、IEEE754厳密に正の (非正規) 値の最小値は、4 倍精度の浮動小数点形式を使用して2 −16493 ≈ 10 −4965です。GCC が 10 -4949未満のものを拒否するのはなぜですか? 制限を 10 -4965ではなく10 -4949に決定する、その下で起こっている可能性のあるさまざまなことの説明を探しています。

#include <stdio.h>

void prt_ldbl(long double decker) {
    unsigned char * desmond = (unsigned char *) & decker;
    int i;

    for (i = 0; i < sizeof (decker); i++) {
         printf ("%02X ", desmond[i]);
    }
    printf ("\n");
}

int main()
{
    long double x = 1e-4955L;
    prt_ldbl(x);
}

オンラインで GNU GCC バージョン 4.8.1を使用しています。どのアーキテクチャで実行されているかわかりません (これが原因である可能性があります)。さまざまなアーキテクチャからの調査結果を自由に投稿してください。

4

2 に答える 2

2

あなたのlong double型は(*)4倍精度ではないかもしれません. 単純に387 80 ビット拡張倍精度形式である可能性があります。この形式の指数のビット数は 4 倍精度と同じですが、仮数ビットがはるかに少ないため、この形式で表現できる最小値はほぼ正しいように聞こえます (2 -16445 ) 。


(*)long doubleハードウェアに 4 倍精度を実装するプロセッサがないため、4 倍精度ではない可能性があります。long doubleコンパイラは常にソフトウェアで 4 倍精度を実装できますが、倍精度、extended-double、またはdouble-doubleにマップする可能性がはるかに高くなります。

于 2014-09-18T15:22:49.120 に答える