如何使用DBL_MANT_DIG来检查strtod

时间:2013-04-14 11:47:40

标签: c floating-point

请考虑以下代码:

#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_DIGlog10(2^DBL_MANT_DIG)版本来检查{{1}的结果是对的吗?

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()作为精度并将其输出与原始字符串进行比较。