每當我輸入了一些在這個程序中的程序返回的值是1小於實際結果......這裏有什麼問題?冪函數返回1更少結果
#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,c,n;
scanf("%d",&n);
c=pow((5),(n));
printf("%d",c);
}
每當我輸入了一些在這個程序中的程序返回的值是1小於實際結果......這裏有什麼問題?冪函數返回1更少結果
#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,c,n;
scanf("%d",&n);
c=pow((5),(n));
printf("%d",c);
}
pow()
返回double
,從double
到int
的隱式轉換是「舍入到零」。
所以它取決於pow()
功能的行爲。
如果它是完美的,然後沒問題,轉換是準確的。
如果不是:
1)的結果爲稍大,則轉換將圓它下降到期望值。
2)如果結果略小,則轉換將全面下降,這是你所看到的。
溶液:
變化轉化爲「舍入到最接近的整數」通過使用rounding functions
c=lround(pow((5),(n)));
在這種情況下,只要pow()
具有小於+ -0.5錯誤你會得到預期的結果。
如果您需要大的數字準確的結果,你應該使用任意精度數學庫像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;
}
int int int int – user3528438
你的意思是,當你輸入「2」時結果是「24」? – Ctx
@ user3528438是'int? –