【发布时间】:2013-12-23 13:38:51
【问题描述】:
如果我像下面这样将浮点数和整数相乘,为什么所有乘法都会导致不同的结果?我的期望是一致的结果。我认为在这两种情况下,int 值都会在乘法之前隐式转换为浮点数。但似乎有区别。这种处理方式不同的原因是什么?
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
谢谢 托尔斯滕
【问题讨论】:
-
这是真正的代码吗?我得到了相同的结果,但我不明白为什么会不同。
-
第二个表达式可以在编译时求值——你用的是什么编译器?查看它产生的字节码。
-
在 Ubuntu 上使用 g++ 4.7.3 进行了尝试:两个乘法都导致 13
-
编译器是 Visual Studio 2010 的内置版本。是的,它是真正的代码 =)
-
@Floris:你是对的。反汇编显示对于 result1 没有执行乘法运算。仅采用编译时 const 值。
标签: c++ floating-point multiplication