簡體   English   中英

如何使用boost :: multiprecision在運行時數精度上進行更改

[英]how to change at runtime number precision with boost::multiprecision

我從boost :: multiprecision文檔中讀到

根據數字類型,精度可以任意大(僅受可用內存限制),在編譯時固定(例如50或100個十進制數字),或由成員函數在運行時控制的變量。 這些類型是啟用表達式模板的,以提供比天真的用戶定義類型更好的性能。

我已經閱讀了更多文檔,但我沒有找到任何關於在運行時更改精度的信息。 我只看到模板允許我在編譯時設置精度,這不是我想要的(我想創建一個使用非常高的縮放系數來縮放分形的程序)。

如何創建一個允許我在運行時更改其精度的double類型?

大多數后端數量只有可選的固定容量。

還要注意一些后端(值得注意的是cpp)需要一個分配器,所以它們/隱式/按需要增長(直到給定的限制):

通常cpp_bin_float分配內存:其數字所需的所有空間都直接在類中分配。 因此,應注意不要使用數字計數太高的類,因為堆棧空間要求會失控。 如果這代表一個問題,那么提供一個分配器作為模板參數會導致cpp_bin_float動態分配它需要的內存

讓我查看最受歡迎的后端的文檔:

  • gmp的mpf_float遵循這個:

     typedef number<gmp_float<0> > mpf_float; 

    類型gmp_float可以通過指定非零Digits10模板參數以固定精度使用, 或者通過將模板參數設置為零以可變精度使用

    typedef mpf_float提供了一個變量精度類型,其精度可以通過數字成員函數來控制。

  • 類似於MPFR后端:

    類型mpfr_float_backend可以通過指定非零Digits10模板參數以固定精度使用,或者通過將模板參數設置為零以可變精度使用。

    typedef mpfr_float提供了一個變量精度類型,其精度可以通過數字成員函數來控制。

動態精度用法的示例:

// Operations at variable precision and no numeric_limits support:
mpfr_float a = 2;
mpfr_float::default_precision(1000);
std::cout << mpfr_float::default_precision() << std::endl;
std::cout << sqrt(a) << std::endl; // print root-2

它將使numeric_limits未定義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM