如果赋值给一个整数,pow()的返回值将被舍入

我在C中使用pow函数,并将返回值存储在整数types中。 看下面的代码片段:

 for (i = 0; i < 5; i++){ val = (int)pow(5, i); printf("%d, ", val); } 

这里ival是整数,输出是1, 5, 24, 124, 624 。 我相信这是因为一个浮点数25被视为24.99999 …被分配到一个整数四舍五入到24。

我怎么能通过这个如果我仍然需要存储返回值在一个int?

在铸造之前添加0.5int 。 如果你的系统支持它,你可以调用C99的round()函数,但是为了便于携带,我宁愿避免它。

更换

 val = (int)pow(5, i); 

 double d = pow(5,i); val = (int)((d > 0.0) ? floor(d + 0.5) : ceil(d - 0.5)); 

自己实施战略。

 int myPow(int base, int exponent) { int n = 1; for (int i = 0; i < exponent; i++) { n *= base; } return n; } 

当然,这只能处理积极的指数,只能用于整数,而且确实有更有效的方法来做到这一点。 例如,参见Haskell中^的来源 。

我有这个问题,我自己。 我很容易在你的指令中解决它只是添加如果语句。

 if (k%n>0) { k=k+1; }