2015-10-11 91 views
-1

我想返回一個double設置精度的函數!這可能嗎?我想要精確度爲10 -5設置精度返回語句C++

例如:

double f(double a ,double b) 
{ 
    //something like return.setprecision(6); 
    return (a+b)/2; 
} 
+0

你的意思是截短到n小數?那有什麼用處? –

+1

Double是二進制的。您無法準確地將其舍入到一定數量的小數位,會出現舍入問題。所以你需要告訴你想要達到什麼,以獲得正確的解決方案。 – hyde

+0

@hyde:Re「double是二進制的」,這在實踐中是如此*在當前的PC機上。 C++標準允許二進制和十進制浮點表示。整型類型限制爲二進制。 –

回答

2

假設你的意思是截短至5位小數:

乘以10 。舍入爲整數。將結果除以10 。

對於四捨五入,請使用標準庫,以避免超出整數類型的範圍。


請注意,結果只能是完美的可以精確表示的數字。儘管C++標準允許使用十進制表示,但浮點數的常見表示是二進制的。這意味着與大多數數字結果將不準確。

+0

這在邊緣情況下無法正常工作 –

+0

@EdHeal:如果OP需要處理DBL_MAX附近的數字,檢查這種大小並且什麼都不做也是微不足道的。如果OP表示除5個小數以外的其他東西,例如尾數只有6個十進制數字,那麼這很難做到。無論如何,結果只能是完美的數字,可以精確表示。 –

+0

邊緣情況是由於二進制和十進制系統之間的轉換引起的。有很多。 –

0

不,這是不可能的。雙精度取決於硬件/ CPU等。

無論如何 - 爲什麼要這樣做?