私は c++ でコーディングを始めたばかりですが、MATLAB と MySql の経験はかなりあります。いくつかの複合数を計算しようとしているため、精度が重要です。倍数を使用してこれを実行しようとしましたが、何らかの理由で有効数字 7 桁 (float と同じ) の精度しか得られませんでした。long double を使用して計算を試みましたが、それでも 7 sf の精度しか得られません。
double を正しく初期化していませんか? 私はそれらが標準ライブラリの一部だと思った?? どんな助けでも大歓迎です。以下のコードは、計算に使用されるコードの主要部分を示しています (残りは主にデータのロードまたはデバッグです)。
アップデート
コードのサンプルを次に示します (マイナスのデータ読み取り)。最初の 5 つの値を入力しました。計算は ( EXPECTED OUTPUT ) Excel で計算され、まったく同じ入力を使用する必要があります。
0
-1.09526
4.364551963
2.745835774
3.029002506
以下のコードが与えるもの ( ACTUAL OUTPUT ):
0
-1.095260000
4.3591394642
2.7340763329
3.0179393198
コード:
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main(){
std::vector<double> compoundedcalculation; // pre-allocating for the compounded calculations
std::vector<double> dailycompound; // pre-allocating for daily compoundvalue
compoundedcalculation.insert(compoundedcalculation.end(), 0.0); // setting the first value as 0
double dailycompoundval[] = {0,-1.09526,5.46038,-1.61801,0.283089};
dailycompound.assign(dailycompoundval,dailycompoundval+5);
double indCC;
for (int n = 0; n < 5 ;n++)
{
indCC = ((((1+((compoundedcalculation.at(n))/1000))*(1+((dailycompound.at(n))/1000)))-1)*1000);
printf(" %.17g \n", indCC);
compoundedcalculation.insert(compoundedcalculation.end(), indCC );
}
return 0;
}
ありがとうございます。
更新 2:
予想結果と実際の結果の両方で、複利計算に同じ式が使用されます。
複利合計 = ((1+(日次レート/10000))*(1+(前回の複利合計/10000)))
1 日の料金は次のとおりです。
1 日目: 0 2 日目: -1.09526 3 日目: 5.46038 4 日目: -1.61801 5 日目: 0.283089