任何人都可以解释为什么以下代码产生不同的结果?
double zaehler = -20;
double teiler = 0.08;
printf("ergebnis = %d \n", ((int) (zaehler/teiler)) << 7 );
printf("ergebnis = %d \n", (int) (-20/0.08) << 7 );
结果:
ergebnis = -31872
ergebnis = -32000
非常感谢
答案 0 :(得分:0)
在64到80位之间的差异可能的范围内,非常小的舍入差异可以解释不同的输出。 truncate to int和shift的组合可以放大一点点差异。这个计划:
#include <stdio.h>
int main(){
double zaehler = -20;
double teiler = 0.08;
printf("ergebnis = %d \n", (int) (zaehler/teiler) );
printf("ergebnis = %d \n", (int) (-20/0.08));
}
打印:
ergebnis = -249
ergebnis = -250
如果除法给出的答案甚至小于250,那么对int的截断将得到249.我建议舍入而不是截断。
Eclipse,MinGW:
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp"
g++ -o TestCPP.exe main.o