2012-04-23 138 views
0

我一直無法在維基百科(或SO)上找到答案,或者在這個非常簡單的問題的文檔中找到答案。什麼是精度?

浮點數的精度如何用整數表示?

我在C++的任意精度浮點庫MPFR上使用封裝器MPFRC++。有設置默認精度的選項,它需要一個整數作爲參數。

這樣的整數是什麼意思?

例如:set_default_prec(128)

此外,我檢查sizeof各種默認精度,但他們似乎總是相同的?爲什麼?

例如爲:

set_default_prec(128); sizeof(mpfr :: mpreal); // 16

set_default_prec(4096); sizeof(mpfr :: mpreal); //仍然是16 ...

回答

5

set_default_prec無疑地改變了分配用於存儲數據的存儲量(比特數)。大約需要3.5位來存儲一位十進制數字,所以你只需使用簡單的數學運算來計算給定數量的數字需要多少字節。

至於sizeof保持不變,你肯定有一個結構(或類)只包含一個指向實際數據,某事,這一般順序:

namespace mpfr { 
    struct real { 
     char *data; 
     size_t size_allocated; 
     size_t size_inuse; 
     size_t num_digits; 
    }; 
} 

當您更改精度,修改存儲在num_digits中的值,並且可能修改data指向的塊的大小,但結構的大小保持不變。

1

你想要的一切都可以通過Google搜索「浮點」和「精確」來找到。例如:

http://en.wikipedia.org/wiki/Floating_point

浮點表示是在概念上的科學記數法 類似。邏輯上,浮點數包括:

給定基數(或基數)中給定長度的帶符號數字字符串。這個數字串被稱爲有效數字, 係數或不常用的尾數(見下文)。 的長度有效數決定了可以用 表示的數字的精確度。假設小數點位置始終爲 位於有效位數內的某個位置 - 通常位於 最高有效位後面或最右邊位置,或者最右邊位置(最少有 位)。本文將通常遵循約定 小數點位於最重要(最左邊)的 數字之後。

換句話說:

  1. 浮點數是「近似」,不一定是確切

  2. 該浮點數的「精確」確定如何準確的近似值可以。更多的位數意味着更高的精度(您的數字更「確切」)。位數越少意味着精度越低(數字越「圓整」)。

  3. 「精度」的數量可以表示爲一個整數。

從MPFR網站:

http://www.mpfr.org/mpfr-current/mpfr.html#MPFR-Basics

甲浮點數,或浮動的簡稱,是一個任意精度 有效數(也稱爲尾數)具有有限的精度指數。 ...

精度是用來表示浮點數的有效位數 的位數;相應的C數據類型爲 mpfr_prec_t。精度可以是MPFR_PREC_MIN 和MPFR_PREC_MAX之間的任何整數。在當前實現中,MPFR_PREC_MIN是 等於2 ...

「set_default_prec()」,當然,是用於改變精度(從 「2」)的機制。

+0

但這正是我試圖解決這個問題的不一致性。維基百科說「精確度」=有效數字中的位數。但MPFR表示「精度」=有效位數BITS的數量。這些不同。 – cmo 2012-04-25 12:12:03

相關問題