有任何分辨率差异吗?

时间:2014-03-30 04:37:15

标签: c++ c numeric numerical-methods

鉴于float Afloat B,之间存在差异:

float C = A * B;

float D = (float) ( (double)A * (double) B);

2 个答案:

答案 0 :(得分:1)

很难解释你的问题。我相信,鉴于float x yfloat z = x * y;

},您是否真的在问
float z = (double)x * (double)y;

在数值上等同于:

float

这个问题无法完全回答,因为C和C ++只需要很少的doublefloat类型。但是,如果假设double和{{1}}分别是IEEE-754 binary32和binary64,那么答案是肯定的;两个表达式只用一个舍入计算,IEEE-754要求正确舍入,所以结果是相同的。

答案 1 :(得分:-1)

我认为您打算做的是以double精度计算表达式,然后分配给单精度(float)变量。

答案是否定的,“没有区别”,结果不会有所不同。原因是变量A& B定义为float,因此在计算过程中将其升级为double无法提高准确性。如果您想提高精确度,请定义A& Bdouble。更好的测试是尝试近乎单一的表达。