将整数除法存储在浮点值C ++中

时间:2012-08-01 15:34:46

标签: c++ casting floating-point int division

我只是想问一下,如果我在这样的浮点变量中存储时没有将整数强制转换为浮点数会发生什么?

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = IntVar1/IntVar2;

目前我这样做:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = float(IntVar1)/float(IntVar2);

但是在我拥有的代码数量上,这看起来确实很迟钝。我想将我的int变量更改为float,但我想这会影响性能。由于整数值不应该包含任何小数,因此感觉完全是浪费。

所以我想知道,有没有办法选择1可以工作?或者我必须将类型转换或更改变量浮动? (所有类型转换几乎使代码不可读)

4 个答案:

答案 0 :(得分:3)

我不会过分担心过早优化。如果将您的值表示为float类型更有意义,请选择它。如果您的程序没有按照您的需要运行,并且您已经对它进行了分析并知道浮点运算是问题,那么就开始考虑如何加速它。

我重视所有演员的可读性,这似乎也是你的直觉。

此外,既然这个问题被标记为C ++,我认为它(不幸的是?)更具惯用性:

float FloatVar = static_cast<float>(IntVar1)/IntVar2

答案 1 :(得分:3)

看到功能的魔力:

float div(int x, int y)
{
    return float(x) / float(y);
}

现在你可以说:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = div(IntVar1, IntVar2);

答案 2 :(得分:1)

您需要至少有一个操作数是浮点数,否则除法将被截断。我通常会抛出第一个操作数:

float FloatVar = (float)IntVar1/IntVar2;

,优雅的,并不是那么糟糕。

答案 3 :(得分:0)

根据ISO / IEC标准 - N3797 - 第5.6节

  

对于积分操作数,/运算符产生代数商   丢弃任何小数部分;如果商a / b是   在结果的类型中可表示,(a / b)* b + a%b等于a;   否则,a / b和%b的行为都是未定义的

丢弃小数部分称为截断为零

毫无疑问,

中是否丢弃了小数部分
22/7