为什么整数/浮点数乘法会导致不同的结果
Why does int/float multiplication lead to different results?
如果我像下面这样将浮点数和整数相乘,为什么所有的乘法都会导致不同的结果?我的期望是一致的结果。我认为在这两种情况下,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
谢谢 托尔斯滕
可能发生的情况是:
假设 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
}
相关文章:
- 序列化,没有库的整数,得到奇怪的结果
- 尝试将字符串/字符转换为整数会产生意外结果
- 取消引用指向整数的指针时获得不同的结果
- AVX2 整数乘以有符号 8 位元素,产生有符号 16 位结果?
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 将较大的整数写为二进制并读回它们会产生不好的结果
- C++,概念不适用于无符号整数作为结果类型?
- 比较整数提升后的结果
- 如何将 xt::sum 表达式结果转换为整数
- 涡轮增压C++结果无法与长整数
- 为什么不同的整数声明会改变结果?
- 我可以将比较结果用作C++的整数吗?
- 为什么使用 int64_t 会产生错误的结果,而双精度则按预期进行简单的整数乘法
- std::reduce 似乎将结果转换为整数
- 从文本文件中读取并使用 sizeof 结果计算整数的数量到 nan
- 整数变量与整数字面变化的乘法结果
- 打印整数指针元素时的结果不同
- 整数异或C++的可能结果
- 如何使用字符串和整数获取汽车类的整数结果
- 使用不同的表达式计算同一整数时的结果不一致