如果赋值为整数,则pow()的返回值会向下舍入

时间:2011-10-29 06:02:23

标签: c pow

我在C中使用pow函数并将返回值存储为整数类型。请参阅下面的代码段:

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?

中,我怎么能通过这个呢?

4 个答案:

答案 0 :(得分:9)

在投射到0.5之前添加int。如果您的系统支持它,您可以调用C99 round()函数,但出于可移植性原因,我更愿意避免使用它。

答案 1 :(得分:5)

替换

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

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

答案 2 :(得分:3)

自己动手制作。

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

当然,这仅处理正指数,并且仅适用于整数,并且肯定有更有效的方法。例如,请参阅the source for ^ in Haskell

答案 3 :(得分:-3)

我有自己的这个问题。我在你的指令中轻松解决了它只需添加if语句。

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