2013-03-19 61 views
1

我知道這是一個非常愚蠢的問題,但我希望有人可以提供幫助。真的基本mpir問題

我被迫使用MPIR出於精度原因,所以我必須翻譯我的所有C代碼。基本上我只需要更高精度的數字。然而,我真的很困惑我的變量使用的數據類型。我明白mpz_t是整數。由於我存儲的數字有很多小數位,這顯然是不合適的,因爲整數只是整數

mpq_t是有理數。因爲我認爲每個存儲的值都不是理性的數字,所以我不認爲這是合適的。

mpf_t用於浮點數。由於這具有「有限精度」,我不明白這對於我的變量是如何使用的,因爲我被告知使用mpir的主要原因是爲了提高精度。

我只是想能夠以準確的方式表示我的數字,而我使用這個數據的全部原因是因爲我被告知在真正的大數和小數之間進行算術時,會有助於保持準確性。我應該爲mpir使用哪種數據類型?我被告知我需要超過四倍的精度。 :-(

我只是覺得自己被整個事情混淆,需要什麼數據類型提供一些指導使用以及如何確定的精度水平。在可能的話一個非常簡單的方法來解釋。

回答

1

MPIR 2.6.0 documentation(PDF鏈路),第7章:

MPIR浮點數存儲在上 操作它們具有mpf_前綴類型mpf_t的對象和功能。

每個浮點數的尾數具有用戶可選精度,僅受可用內存限制。每個變量都有其自己的精度,並且可以隨時增加或減少。

它看起來像它具有多種功能,以幫助您設置精度,位數,如mpf_set_default_precmpf_get_prec,並mpf_set_prec

您應該使用mpf_t作爲數據類型,精度有限,但MPIR的優點是您可以設置該限制。如果你喜歡,你可以使用128位的浮點數尾數。這將是32位浮點數的4倍以上。

根據Wikipedia on quadruple-precision floating-point format,看起來四倍精度意味着113位的有效位數/尾數,所以您可能希望使用MPIR至少113位的精度來獲得該​​精確度。

+0

非常感謝您清理所有問題我會試一試 – user2187443 2013-03-19 17:33:47

0

http://www.mpir.org/mpir-2.6.0.pdf

頁48,每個浮點變量具有用戶可選擇的精度的文檔狀態的只受可用內存限制

他們還寫:

void mpf_set_prec (mpf_t rop, mp_bitcnt_t prec) [Function] 

    Set the precision of rop to be at least prec bits. The value in 
    rop will be truncated to the new precision. This function requires 
    a call to realloc, and so should not be used in a tight loop. 

對該功能的調用是否適合您的需求?