0

次のコードを検討してください。

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <errno.h>
#include <float.h>

int main (void) {
    double val;
    /* base b = 2; 2^DBL_MANT_DIG */
    /* decimal digits log10(2^DBL_MANT_DIG) */
    /*const char *str = "9007199254740992";*/
    const char *str = "9007199254740993";

    errno = 0;
    val = strtod(str, NULL);

    printf("%d\n", DBL_MANT_DIG );

    if (errno == ERANGE) {
        printf("error\n");
    } else {
        printf("%f\n", val);
    }

    return 0;
}

これは以下を返します:

53
9007199254740992.000000

str には、私のマシンが処理できるよりも有効な桁数の文字列番号があるため、そのバージョンDBL_MANT_DIGまたはそのバージョンを使用して、結果が正しいlog10(2^DBL_MANT_DIG)ことを確認するにはどうすればよいですか?val

4

1 に答える 1