gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:29:28 26 4
gpt4 key购买 nike

如果我像下面这样将一个 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

谢谢 托斯滕

最佳答案

您可能会发生的情况是:

假设 IEEE 或类似的 float ,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
}

关于c++ - 为什么 int/float 乘法会导致不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20744733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com