同样的浮点计算,在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