如果赋值给一个整数,pow()的返回值将被舍入
我在C中使用pow
函数,并将返回值存储在整数types中。 看下面的代码片段:
for (i = 0; i < 5; i++){ val = (int)pow(5, i); printf("%d, ", val); }
这里i
和val
是整数,输出是1, 5, 24, 124, 624
。 我相信这是因为一个浮点数25被视为24.99999 …被分配到一个整数四舍五入到24。
我怎么能通过这个如果我仍然需要存储返回值在一个int?
在铸造之前添加0.5
到int
。 如果你的系统支持它,你可以调用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; }