C程序为简单的数学提供错误的输出!

Duf*_*uff 1 c

(所有都被声明为int,没有事先被初始化为任何东西.我已经包含math.h并且正在使用-lm进行编译)

cachesize = atoi(argv[1]);
blocksize = atoi(argv[3]);
setnumber = (cachesize/blocksize);
printf("setnumber: %d\n", setnumber);
setbits = (log(setnumber))/(log(2));
printf("sbits: %d\n", setbits);
Run Code Online (Sandbox Code Playgroud)

当cachesize为1024并且blockize为16时,输出如下:

setnumber: 64
sbits: 5
Run Code Online (Sandbox Code Playgroud)

但是log(64)/ log(2)= 6!

当给出cachesize 512并阻塞32时,它可以正常工作.我似乎无法获胜.

我真的希望这对我来说是一个愚蠢的错误,如果有人能指出它是什么,我将不胜感激!谢谢!

PS:我先在Yahoo Answers上发布了这个,但那可能很傻.不会再这样做了.

Mat*_*hen 5

log返回一个double.你应该圆而不是截断.但是,您可以在此处使用log2.