对整数执行整数除法需要使用强制转换来浮动还是加倍才能更精确?

时间:2014-02-17 20:09:54

标签: c++ c int precision

如果我想将2个整数ab除以产生第三个整数c,我需要在除法之前将除法转换为浮点数或加倍,以确保最大精度?

int a,b;
int c1 = a/b;        // without cast
int c2 = (float)a/b; // with cast

因此c1c2更多,更少或更精确吗?

2 个答案:

答案 0 :(得分:8)

不,你必须限制自己投射。

具有足够大的值,例如1000000000L / 1000000001L显然是0,但是当转换为float时,它给出1.0,因为(float)a ==(float)a + 1.

main() {
    int a = 1000000000;
    printf("%d\n%d", a/(a+1), (int)((float)a/(a+1)));
}

输出:

0
1

答案 1 :(得分:1)

使用浮点除法获得的精度无关紧要,因为转换为int会立即将其丢弃。在任何一种情况下,结果都是相同的。