鉴于float A
和float B
,之间存在差异:
float C = A * B;
和
float D = (float) ( (double)A * (double) B);
答案 0 :(得分:1)
很难解释你的问题。我相信,鉴于float
x
y
和float z = x * y;
,
float z = (double)x * (double)y;
在数值上等同于:
float
这个问题无法完全回答,因为C和C ++只需要很少的double
和float
类型。但是,如果假设double
和{{1}}分别是IEEE-754 binary32和binary64,那么答案是肯定的;两个表达式只用一个舍入计算,IEEE-754要求正确舍入,所以结果是相同的。
答案 1 :(得分:-1)
我认为您打算做的是以double
精度计算表达式,然后分配给单精度(float
)变量。
答案是否定的,“没有区别”,结果不会有所不同。原因是变量A
& B
定义为float
,因此在计算过程中将其升级为double
无法提高准确性。如果您想提高精确度,请定义A
& B
为double
。更好的测试是尝试近乎单一的表达。