計算を始める値、最終的な結果、計算回数(期間)、の3つから利率を求めたいんですが、、
単利の利率を求める公式から、利率を0.001ずつ減らすループを作れば、誤差0.001以内の値が出るのではないかと思ったんですが、、全く動いてくれなせん、何故でしょうか??
#include<stdio.h>
double main()
{
double x;
double s;
double k;
int counter1;
double a;
double b;
double r;
int counter2;
printf("初期値=?\n");
scanf("%lf",&x);
printf("結果=?\n");
scanf("%lf",&s);
printf("期間=?\n");
scanf("%d",&counter1);
k=((s-x)/(counter1*x));//*単利での利率の公式*//
printf("単利での利率(%%)=%f\n",k*100);
while(counter1==counter2){
b=x;//*bはxを上書きさせない為*//
k=k-0.001;
while(b<=s){
//*複利の計算*//
a=b/100;
r=a*k;
b=b+r;
counter1++;
printf("複利での利率(誤差0.001)=%f\n",k);}
}return 0;}
whileの部分ををforで、
for(b=x;counter1==counter2;k-0.001){
for(counter1=1;b<=s;counter1++){
としても、、コンパイルはできるのですが、、ループ自体をしてくれません、、何故なのでしょうか??C言語以外でもいいですが、、複利の利率は公式とかはあるんでしょうか??
No.1
- 回答日時:
counter2に何も値をセットしていない(つまり、中身がゴミ)状態で
counter1と比較している点に大きな問題があります。
なお、複利の場合の計算式は、
元利合計=元金×(1+利率)^期間
です(^は、べき乗)。
単利の場合の計算式とは全く別です。
すいませんでした、、
whileのところ、、
while(counter1==counter2){
b=x;
k=k-0.001;
while(b<=s){
a=b/100;
r=a*k;
b=b+r;
counter1++;←ではなく、counter2++;でした
forのところ、、
for(b=x;counter1==counter2;k-0.001){
for(counter1=1;b<=s;counter1++){←ではなく
for(counter2=1;b<=s;counter2++){でした、、
それでも同じように動きませんが、、
公式そうだったんですね!!ありがとうございます、、
公式をどのようにあてはめるのか、、まだちょっとわかりませんが、、試行錯誤してみます、、
No.3
- 回答日時:
どうしてもループを使いたいのでしょうか?
利率 = exp(log(最終的な結果 - 初期値) / 期間) - 1 でそのまま出ますが・・・
log は対数関数です。
すごいです!。できました、ありがとうございましたm(__)m。
対数関数、、自体がまだちょっと理解はできないんですが、、これから勉強します!!。
ループができなかった(できる)原因ってあるんですかね?
使っている関数的限界なんですかね??
ありがとうございました。
No.4ベストアンサー
- 回答日時:
一応、確認済みです。
コンパイル時に -lm オプションを付けてください。
#include <stdio.h>
#include <math.h>
int main() {
double x,s,k;
int t;
printf("初期値=?\n");
scanf("%lf",&x);
printf("結果=?\n");
scanf("%lf",&s);
printf("期間=?\n");
scanf("%d",&t);
k = exp(log(s/x)/t)-1;
printf("複利での利率=%f\n",k);
}
No.5
- 回答日時:
> -lmオプションとはなんでしょうか??
No.4さんのコードでは、exp(), log()という数学関数を使っています。
ある種の開発環境では、数学関数を使おうとするときには
コンパイル時に -lm オプションが必要です。
chanman_00さんの環境で -lm オプションの指定が必要かどうかは、
どういう開発環境をお使いかによります。
No.6
- 回答日時:
-l は、コンパイル時に特定のライブラリを使うことを意味します。
URLを参考にして下さい。
参考URL:http://www.kiso.tsukuba.ac.jp/~makimura/text/nod …
環境によってmath.hをインクルードするために必要なんですね!?
なるほど今回math.hでいろいろ便利な関数が沢山ある事が分かったのでよかったです、為になりました、、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
C言語 関数プロトタイプ宣言の...
-
数値を指数部と仮数部に分離したい
-
学校の課題で2次方程式のプログ...
-
関数におけるif文とreturn文に...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
C言語で表記についの質問です
-
指数の表示
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
物体が往復する動きを作りたい
-
C言語で内積、、、わかりません。
-
c言語のコンパイルエラー canno...
-
C言語のpow関数の不具合
-
処理時間計測
-
float?数字の後にLがつくもの
-
「割り算」 と 「分数の掛け算」
-
C++標準ライブラリィーのcomple...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報