为什么int / float乘法导致不同的结果?

时间:2013-12-23 13:38:52

标签: c++ floating-point multiplication

如果我将float和整数乘以如下所示,为什么所有乘法都会导致不同的结果?我的期望是一致的结果。我认为在这两种情况下,int值在乘法之前被隐式转换为float。但似乎有所不同。这种不同处理的原因是什么?

int multiply(float val, int multiplier)
{
    return val * multiplier;
}

int multiply2(float val, int multiplier)
{
    return float(val * multiplier);
}

float val = 1.3f;

int result0 = val * int(10); // 12
int result1 = 1.3f * int(10); // 13
int result3 = multiply(1.3f, 10); //12 
int result4 = multiply2(1.3f, 10); // 13

谢谢  的Thorsten

1 个答案:

答案 0 :(得分:8)

您可能会遇到以下情况:

假设IEEE或类似的浮点数,1.3无法表示,可能是1.299999,乘以10是12.99999然后截断为int是12.

然而,1.3 * 10可以在编译时进行评估,最有可能准确表示13。

根据代码的实际结构,使用的编译器以及使用的设置,它可以评估1到12或13,具体取决于它是在运行时还是在编译时执行此操作。

为了完整性,使用以下代码,我可以重现它:

extern int result0;
extern int result1;

float val = 1.3f;

void foo( )
{   
 result0 = val * int(10); // 12
 result1 = 1.3f * int(10); // 13
}