我剛剛開始用C++編寫代碼,但在MATLAB和MySql中有相當多的以前的經驗。我正在計算一些複合數字,因此準確性是關鍵。我試圖用雙數來做到這一點,但由於某種原因,我只能得到7位有效數字的準確性(與浮點數相同)。我甚至嘗試使用一個長雙重來嘗試計算,但我仍然只得到7 s.f.的精度。Visual Express 2010 double variable precision
我沒有正確初始化雙打嗎?我以爲他們只是標準庫的一部分?任何幫助不勝感激。下面的代碼給出了用於計算的代碼的主要部分(其餘部分主要是加載數據或調試)。
UPDATE
下面是代碼(減去數據讀取)的一個樣本。我輸入了前5個值。計算應該給(預期輸出)在Excel計算,使用完全相同的輸入:
0
-1.09526
4.364551963
2.745835774
3.029002506
什麼下面的代碼給出(實際輸出):
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)))
每日房價:
第一天:0 第二天:-1.09526 第3天:5.46038 第4天:-1.61801 第5天:0.283089
你怎麼知道它只存儲7位數的精度? – yiding
您應該在打印數字的位置包含該部分,還是隻在調試器中查找? – Mario
這是毫無意義的要求我們猜測。如果你想得到有意義的幫助,你應該展示一個展現你不明白的行爲的程序。然後我們可以解釋它。 –