如果我想将2个整数a
和b
除以产生第三个整数c
,我需要在除法之前将除法转换为浮点数或加倍,以确保最大精度?
int a,b;
int c1 = a/b; // without cast
int c2 = (float)a/b; // with cast
因此c1
比c2
更多,更少或更精确吗?
答案 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
会立即将其丢弃。在任何一种情况下,结果都是相同的。