VS2010 編譯器的數值計算bug

2021-06-21 21:50:48 字數 534 閱讀 6301

最近除錯程式,發現乙個奇怪問題,在測試樣例時,有些樣例有時出錯,有時正確。仔細檢查了程式,發現不是程式錯誤,最後只好對錯誤的情況,進行記錄,然後除錯,結果發現乙個讓人吃驚的問題,vs2010的編譯器對於數值計算會犯一些數值分析所說的常見錯誤,例如我用command window除錯發現了如下問題

>? f0

1020.0

>? f1 + f2- fjob

1024.0

>? f1 + f2 - fjob - f0

4.0>? f1 + f2- f0 - fjob 

0.0值得指出的是,f1、f2和fjob的數值很大,超過了1e10級別,但是在double.maxvalue的範圍之內,按理說,這個應該是不會出問題的,但在實際計算中確出問題了,也就是說兩個大級別的數加減會出現錯誤,有意思的是,後面乙個也是大級別的數值計算,但沒有出現數值錯誤,這個讓人很奇怪。因而,不難推知,這與vs2010的數值計算的方法有關係,因而我們在進行數值計算時,遇到大級別數值計算時,一定要非常小心和謹慎。有時的錯誤並不來自於所程式設計序本身,而是所依賴的開發環境和編譯平台。

VS2010 減小編譯大小的設定

開啟選單 工具 選項 文字編輯器 c c 高階 中的選項,把 始終使用回退位置 和 回退位置已在使用時,不警告 都設為 true 而對於下面的 回退位置 您可以可以不設定,那麼.sdf檔案和ipch資料夾則 會被放在臨時目錄中 如果你想自己指定個位置存放,則在 回退位置 後面填入 位置的絕對位址。這...

VS2010是用什麼編譯的

肯定不是vc6.這個老古懂對新的事物支援有限,比如cpu的新特性,新的暫存器,新的指令集等等.那麼vs2003 vs2005,vs2008這些開發工具呢?都有可能.不過要詳細的了解它是如何構建的,那麼話得從頭說 如果僅僅是說vs2010的ide用什麼作呢,那麼用vc2005,vc2008都可以的,實...

VS2010編譯關於winnt h的錯誤

今天在編譯乙個以前寫的程式時,發現如下的乙個錯誤 1 clcompile 1 stdafx.cpp 1 c program files x86 microsoft sdks windows v7.0a include winnt.h 290 error c2146 語法錯誤 缺少 在識別符號 pvo...