从double转换为float时检测精度损失

Yog*_*ora 7 c++ floating-point rounding-error rounding floating-accuracy

我正在编写一段代码,我必须将其从double转换为float值.我正在使用boost :: numeric_cast进行此转换,这将提醒我任何溢出/下溢.但是我也有兴趣知道这种转换是否会导致一些精确损失.

例如

    double source =  1988.1012;
    float dest = numeric_cast<float>(source);
Run Code Online (Sandbox Code Playgroud)

产生具有价值1988.1的dest

有没有什么方法可以检测到这种精确损失/舍入

Wil*_*l A 11

您可以将浮动转换为双精度并将此双精度值与原始值进行比较 - 这可以为您提供关于是否存在精度损失的公平指示.

  • 比公平更好.它会准确地告诉您是否丢失了任何信息. (4认同)

Jac*_*cob 9

float dest = numeric_cast<float>(source);
double residual = source - numeric_cast<double>(dest);
Run Code Online (Sandbox Code Playgroud)

因此,residual包含您正在寻找的"损失".