2013-11-27 75 views
0

我打算計算具有10位小數精度的雙精度型。當然,我希望結果具有相同的10位小數精度。但是,它不起作用,VS2008中只有6個小數點是可能的。有什麼理由或任何想法?如何在C++中使用10位小數精度計算雙變量

double dMag = 10; 
double dPixelSize = 4.4; 
double PixelWidth = 1024/2; 
double PixelHeight = 768/2; 
double umtomm = 1000; 

double origin_PosX = 813.227696; 
double origin_PosY = 676.195748; 

double PosX = (origin_PosX - PixelWidth) * dPixelSize/dMag/umtomm; 
double PosY = (origin_PosY - PixelHeight) * dPixelSize/dMag/umtomm; 

如果我檢查PosX和PosY,那麼結果分別是「0.132540,0.128566」。我預計結果分別是「0.13254018624000002,0.12856612912」。

感謝

+0

你如何「檢查」結果?調試器可能不會顯示這些數字的完整精度。 – woolstar

+0

保存結果文件。然後我檢查。 –

+0

用fprintf? – woolstar

回答

3

從我所收集你混淆了一些東西......

double的精度比僅有6位小數。我強烈建議閱讀this wikipedia article,它解釋了底層double數據類型如何存儲您的數字並解釋其精度。

默認情況下,打印的精度限制在6位小數。爲了解決您需要學習如何使用format string

在您的評論你提到使用

tmp1.Format("%f,%f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1)); 

打印字符串。

嘗試改變這一行

tmp1.Format("%.10f,%.10f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1)); 

,你會看到它小數點後打印10個數字。