2011-09-21 84 views
2

在工作中,我們有MSVS2010旗艦版,我正在編寫一個程序,它使用實數運行詳盡的模擬。我遇到了不小的舍入錯誤,我已經採取了合理的步驟來確保我的算法儘可能在數值上穩定。在VS2010中編譯Windows C++應用程序與長雙打

我想切換到128位四倍精度浮點數(long double,right?),看它有多大的差異。

我已經更換了的double所有相關情況與long double,重新編譯,並再次運行我的虛擬仿真,但像以前那樣有完全相同相同的結果。

這些是我的(調試)編譯器選項按在C/C++我的項目屬性頁:

/ZI/NOLOGO/W3/WX-/ OD/Oy-/d 「_MBCS」/ GM/EHSC/RTC1/GS/fp:precise/Zc:wchar_t/Zc:forScope /Fp"Debug\FFTU.pch「/ Fa」Debug \「/ Fo」Debug \「/Fd"Debug\vc100.pdb」/ Gd/analyze -/errorReport:隊列

我的開發CPU是Core2 Duo T7300,但目標機器將是一個i7。這兩個安裝都是Windows 7 64位。

+4

使用Visual C++,'long double'與'double'相同,因此爲什麼結果是相同的http:// msdn .microsoft.com/en-us/library/s3f49ktz(v = VS.100).aspx –

+0

我明白了。有沒有其他方法可以在Windows中的VS2010中獲得128位四倍精度? (不使用GMP等任何第三方庫,但是Windows.h仍然可以)。 – Ozzah

+3

你認爲你的CPU提供128位浮點嗎? x87只支持32,64和80位(我不是這方面的專家,但我不認爲SSE提供任何uberwise浮點功能)。 –

回答

2

您可以切換到非Microsoft編譯器,如gcc,Borland或Intel。這些都認爲long double爲80位擴展精度,8087的本機內部格式。

+1

gcc-4.3.4'sizeof(long double)'是12. [ideone.com](http://ideone.com/TLbiS)。 VC++'雙打'使用80位寄存器來保存浮點計算的中間結果,但在內存中存儲64位。 – JohnPS