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

Did*_*dii 1 c c++ precision int

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

int a,b;
int c1 = a/b;        // without cast
int c2 = (float)a/b; // with cast
Run Code Online (Sandbox Code Playgroud)

因此c1更多,更少或更精确c2

Aki*_*nen 8

不,你必须限制自己施法.

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

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

输出:

0
1
Run Code Online (Sandbox Code Playgroud)