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_DIGlog10(2^DBL_MANT_DIG)它的版本来检查结果val是否正确?

4

1 回答 1

1

您不使用它们来检查转换是否准确。

这是如何做到这一点的一种方法

另一种方法是找出结果中小数点后有多少个小数位,doublesprintf()其用作精度并将其输出与原始字符串进行比较。

于 2013-04-14T12:04:12.493 回答