处理浮动的不准确性

时间:2015-06-22 07:45:20

标签: c++ precision floating-accuracy floating-point-conversion

我有一个字符串

strValue = "11.900000"

我想将其解析为浮点值。所以我试过了:

float fValue = -1;
sscanf_s(strValue.c_str(), "%f", &fValue);

try
{
    double test = std::stod(strValue, &sz);
    fValue = (float) std::stod(strValue, &sz);
}
catch (...)
{
    fValue = -1;
}

对于double,这是准确的:

test = 11.900000000000000

对于float,这是不准确的:

fValue = 11.8999996

是否有可能准确地做到这一点? (我知道使用花车时存在不准确性,但是有更好的方法吗?)

2 个答案:

答案 0 :(得分:2)

11.899999611.9的最精确近似值,可由float类型表示。

答案 1 :(得分:2)

唯一的方法是使用十进制浮点类型。如果您的平台有FLT_RADIX == 10,那么您可以直接使用float,但显然不是您的情况,并且我不知道任何使用十进制浮点数的当前系统{{3} }。

所以你需要一个自定义类型。您可以使用某些IEEE-754 decimal32库,例如except IBM z-series,或者如果您使用gcc,它已经通过_Decimal32类型支持Intel® Decimal Floating-Point Math Library

您可以在此问题中找到更多信息decimal float