2014-10-01 41 views
3

考慮下面的代碼片斷:差GCC /克++ 4.6.3

ofstream o("myFile.txt"); 

o.precision(14); 
o.width(20); 
o.setf(ios::showpoint); 
o.setf(ios::internal); 
o.fill(' '); 

double zero = 0.0; 

o << zero; 

的結果是:

0.00000000000000 //視覺工作室2010

0.0000000000000 // g ++

這種差異是否可以接受,還是在某個編譯器中出現錯誤?

回答

4

precision的文檔讀取(重點煤礦):

浮點精度確定要對插入操作寫入表達浮點 值的位數 的最大數目。這如何解釋依賴於floatfield 格式標誌是否被設置爲一個特定的符號(固定或科學) 或者未設置(使用默認的符號,這不一定是 相當於是固定的,也沒有科學)。

默認語言環境:

  • 使用默認浮點表示法中,精密字段指定的有意義數字的最大數量在 總顯示計數這兩個前和那些後的小數點 點。注意它不是最小值,因此它不會 填充顯示的數字和尾隨零,如果數字可能是 顯示位數少於精度。

  • 在固定和科學記數法兩者,精度字段指定究竟有多少個數字的十進制 點後顯示,即使這包括尾隨小數零。小數點前的數字 與此 的情況下的精度無關。

這聽起來像編譯器使用不同format flags

+0

非零值是一致的,所以我不認爲這是個問題。 – user109078 2014-10-01 18:38:23