次のコードを検討してください。
#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