I am trying to calculate the exponent in this code and it give me inf
int num;
float term , sum=0;
cout<<"Please enter the number"<<endl;
cin>>num;
for(int i=1 ;i<=100;i++){
term=pow(num,i)/factorial(i);
cout<<term<<" ";
sum=sum+term;
cout<<"Sum ="<<sum<<endl;
int factorial(int n)
if(n > 1)
return n * factorial(n - 1);
else
return 1;
答案 0 :(得分:1)
首先,您的代码使用整数除法,例如完全是2
→7.0/3.0
。您需要使用浮点除法,其中2.3333
→float
...,大约。在C ++中,除法的类型由操作数的类型控制:如果两者都是整数类型,则得到整数除法。
其次,您需要考虑中间结果的数字范围。特别是 n !即使是非常小的 n 也是一个非常大的数字。考虑乘以 n !与你自己相反,你知道 n !²&gt; n n ,总的来说,这是非常具有爆炸性的增长。谷歌搜索的内置计算器说100! =9.332622⋅10^ 157。
使用通常的double
作为32位IEEE类型,其最大值大约为3.4⋅10^ 38,因此如果,您需要使用double
直接计算该阶乘。
使用3.14
的另一个原因是它是C ++中的默认浮点类型,例如: double
的类型为float
。
允许您仍然使用double
的替代方法是通过简单调整前一个术语来计算每个新术语。这也更有效率。但是考虑使用float
,即使float
可以完成这项任务:你获得更好的精确度,然后你就不会误导告诉读者有关使用 platform.ready().then(() => {
fcm.onNotification().subscribe( data => {
this.con.notification_title = data.notification_title;
this.con.notification_message = data.notification_message;
if(localStorage.getItem('oldmsg'))
{
this.temparr = JSON.parse(localStorage.getItem('oldmsg'));
this.temparr.push({"notification_title":this.con.notification_title,"notification_message": this.con.notification_message});
localStorage.setItem('oldmsg',JSON.stringify(this.temparr));
this.presentToast("You Recieved A Message!");
}
else{
this.temparr.push({"notification_title":this.con.notification_title,"notification_message": this.con.notification_message});
localStorage.setItem('oldmsg',JSON.stringify(this.temparr));
this.presentToast("You Recieved A Message!");
}
});
statusBar.styleDefault();
splashScreen.hide();
this.storage.get('introShow').then((result) => {
if(result){
this.navCtrl.setRoot(LoginPage);
this.storage.set('introShow', true);
} else {
this.navCtrl.setRoot(IntroPage);
this.storage.set('introShow', true);
}
this.listenToLoginEvents();
});
});
的特殊原因的代码
答案 1 :(得分:0)
1-pow(num,i)/factorial(i) this is integer division so you should convert it into real division you can make the function returns double so the division will work properly. 2-int factorial(int n) we said above make it double so the division will work properly but making it double is not enough to fix the problem some factorial are huge so double can't represent it so make it long double.