功率函数返回1减少结果

时间:2016-02-26 17:49:06

标签: c int double pow

每当我在这个程序中输入一个数字时,程序返回的值比实际结果小1 ......这里有什么问题?

link_text

enter image description here

3 个答案:

答案 0 :(得分:3)

pow()返回double,从doubleint的隐式转换为"向零舍入"。

所以它取决于pow()函数的行为。

如果它完美无问题,转换就是准确的。

如果不是:

1)结果略大,然后转换将其向下舍入到预期值。

2)如果结果略小,那么转换将向下舍入,这就是你所看到的。

<强>溶液

将转换更改为&#34;舍入为最接近的整数&#34;使用rounding functions

c=lround(pow((5),(n)));

在这种情况下,只要pow()的误差小于+ -0.5,您就会得到预期的结果。

答案 1 :(得分:0)

pow()获取double个参数并返回double

如果您将返回值存储到int并打印出来,则可能无法获得所需的结果。

答案 2 :(得分:0)

如果您需要大数字的准确结果,您应该使用像GMP这样的任意精度数学库。这很简单:

#include <stdio.h>
#include <math.h>
#include <gmp.h>

int main(void) {
    int n;
    mpz_t c;

    scanf("%d",&n);
    mpz_ui_pow_ui(c, 5, n);
    gmp_printf("%Zd\n", c);

    return 0;
}