请考虑以下代码:
#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)
版本来检查{{1}的结果是对的吗?
答案 0 :(得分:1)
您不会使用它们来检查转换是否准确。
Here's one way of how to do it
另一种方法是find out how many decimal digits after the decimal point are there in the resultant double
,使用sprintf()
作为精度并将其输出与原始字符串进行比较。