none
同样的浮点运算,为什么在VS2008和VS2019下有不同的结果? RRS feed

  • 问题

  • 同样的浮点计算,在VS2008中结果为6872.3935582394624,在VS2019中结果却为6872.3935546875000。如果算式加了(double)对float强制转换,那么VS2019的结果与VS2008相同。浮点计算损失精度我稍微理解,但是为什么VS2008的结果等于VS2019加了强制转换的结果?难道VS2019默认不强制转换吗?如果真是这样,为什么vs2019取消了强制转换?(注:浮点模式在精度、严格、快速三个模式下都是这种结果)

    int main(){

    float f_x = 0.17364819;

    float f_y = -0.49240386;

    float f_z = 0.85286850;

    float p_x = 2519.5405;

    float p_y = 12698.646;

    float p_z = -1239.3993;

    double plane_D = -f_x*p_x - f_y * p_y -f_z * p_z;

    }

    VS2008 plane_D = 6872.3935582394624

    VS2019 plane_D = 6872.3935546875000;

    如果改为:

    double plane_D = -(double)f_x*(double)p_x - (double)f_y * (double)p_y -(double)f_z * (double)p_z;

    VS 2019 plane_D = 6872.3935582394624


    2020年7月13日 2:11

全部回复

  • 你好,

    感谢您在MSDN中文论坛发帖提问。

    >>同样的浮点运算,为什么在VS2008和VS2019下有不同的结果

    因为加了(double)对float强制转换之后,精度发生改变所以在vs2019中两种计算方式计算出的结果不一样。

    有关为什么VS2008的结果等于VS2019加了强制转换的结果,我认为这可能跟VS本身相关。我建议您可以将问题发布到开发者社区以获得更好的帮助。

    Best Regards,

    Jeanine Zhang


    MSDN Community Support Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年7月13日 7:15
    版主