1

私は C++ クラスの宿題をしていて、かなり単純な数学関数と思われることをしようとしていますが、期待どおりの結果が返されないため、困惑しています。基本的に、これは APR の問題であり、APR から月利に変換しようとしています。私のインストラクターは、これを計算するために次の式を教えてくれました。

  • 月々の利息 = ((APR / 100) + 1)^(1/12)

これが私が使用しているコードです。単純な間違いを犯していないことを確認していたので、yearlyInterest をmonthlyInterest の計算から分離しました。

double balance, payment, APR;
cin >> balance >> payment >> APR;
const double yearlyInterest = (APR / 100) + 1;
const double monthlyInterest = pow(yearlyInterest, 1/12)

入力 1000、100、および 19.9 を使用して、物理計算機で取得した結果と、期待する結果は次のとおりです。

  1. 年利 ~1.19
  2. 月利 ~1.015...

しかし、私のデバッガーが私に与えている結果は次のとおりです。

  1. 年利 ~1.19
  2. 月利 = 1

基本的に、私のmonthlyInterestが間違っている理由を尋ねていますか? pow() は double を出力するため、型の問題ではないと思います。また、小数が double 型をオーバーフローする必要はないと思います。それほど大きくはなく、とにかく数桁の精度しか必要ありません。誰かが私が犯した間違いを特定するのを手伝ってくれるなら、私はそれを感謝します.

補足:以下を含めました。それが私が学んだことだからです。これが問題なら、私はそれを変えることができます。

#include <iostream>
#include <cmath>
4

5 に答える 5

0

1/12整数除算ではなく浮動小数点除算を強制するには、式が float 値を返すようにする必要があります。

変化する:

const double monthlyInterest = pow(yearlyInterest, 1/12);

に:

const double monthlyInterest = pow(yearlyInterest, 1.0/12);

const double monthlyInterest = pow(yearlyInterest, 1/12);

の整数除算は1/12、小数結果を に切り捨て0ます。したがって、上記の行は次のように処理されます

const double monthlyInterest = pow(yearlyInterest, 0);

0乗した数値は1に等しくなります。したがって、あなたの場合、monthlyInterestには値1が割り当てられます。

于 2013-10-22T18:10:32.270 に答える