今日は自分が書いたプログラムの時間短縮についてアドバイスを頂けたらと思います。
非常に高い精度で複利計算の利率を求める方法は無いでしょうか?
以下がコードです。(case 'h'の実行文でr=r+0.0000......1としています。この部分をもっとスマートに出来ないものかと…)
#include<stdio.h>
double retu(double i,double j,double a,double b){
if(i>2){
return(retu(i-1,j,a,b)*(1+j)+b);
}
else{
return(a);
}
}
int main(){
double motode,TA,span,r,mokuhyou,meseta=0;
char s[2];
printf("日にちを求めるにはhを、利率を求めるにはrを入力してください:");
while(scanf("%1s",s)!=EOF){
switch(s[0]){
case 'h':
span=1;
printf("元手のメセタを入力してください:");
scanf("%lf",&motode);
printf("一日のTAの収入を入力してください:");
scanf("%lf",&TA);
printf("目標金額を入力してください:");
scanf("%lf",&mokuhyou);
printf("利率を入力してください:");
scanf("%lf",&r);
if(motode>=mokuhyou){
printf("error\n");
return 0;
}
while(meseta<mokuhyou){
meseta=retu(span,r,motode,TA);
span++;
}
printf("目標金額到達には%lf日かかります。\n",span);
return 0;
case 'r':
r=0;
printf("元手のメセタを入力してください:");
scanf("%lf",&motode);
printf("一日のTAの収入を入力してください:");
scanf("%lf",&TA);
printf("目標金額を入力してください:");
scanf("%lf",&mokuhyou);
printf("スパンを入力してください:");
scanf("%lf",&span);
while(meseta<mokuhyou){
meseta=retu(span,r,motode,TA);
r=r+0.0000000001;
if(meseta==mokuhyou){
break;
}
}
printf("必要最低限な利率は%.8lfです。\n",r);
printf("meseta=%.8lf\n",meseta);
return 0;
}
printf("日にちを求めるにはhを、利率を求めるにはrを入力してください:");
}
}