每当我在这个程序中输入一个数字时,程序返回的值比实际结果小1 ......这里有什么问题?
link_text
答案 0 :(得分:3)
pow()
返回double
,从double
到int
的隐式转换为"向零舍入"。
所以它取决于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;
}