Я прочитал из boost :: многоцелевая документация:
В зависимости от типа числа точность может быть произвольно большой (ограничена только доступной памятью), фиксированной во время компиляции (например, 50 или 100 десятичных цифр) или переменной, управляемой во время выполнения функциями-членами. Типы с поддержкой шаблонов выражений обеспечивают лучшую производительность, чем простые пользовательские типы.
Я прочитал еще немного документации, но я не нашел ничего относительно изменения точности во время выполнения. Я видел только шаблоны, которые позволяют мне устанавливать точность во время компиляции, это не то, что я хочу (я хочу создать программу для масштабирования фракталов с использованием очень высокого коэффициента масштабирования).
Как я могу создать двойной тип, который позволяет мне изменять его точность во время выполнения?
Большинство серверных номеров имеют только фиксированную емкость по выбору.
Также обратите внимание, что некоторые бэкэнды (в частности, cpp) занимают распределитель, поэтому они / неявно / растут по мере необходимости (до заданного предела):
Обычно
cpp_bin_float
не выделяет памяти: все пространство, необходимое для его цифр, выделяется непосредственно внутри класса. В результате следует позаботиться о том, чтобы не использовать класс со слишком большим количеством цифр, поскольку требования к пространству стека могут выйти из-под контроля. Если это представляет проблему, то предоставление распределителя в качестве параметра шаблона приводит кcpp_bin_float
динамически распределять необходимую память
Позвольте мне проверить документацию на самые популярные бэкэнды:
ГМП-х mpf_float
придерживается этого:
typedef number<gmp_float<0> > mpf_float;
Тип gmp_float можно использовать с фиксированной точностью, указав ненулевой параметр шаблона Digits10, или с переменной точностью, установив аргумент шаблона в ноль.
typedef mpf_float
обеспечивает тип переменной точности, чей
Точность можно контролировать с помощью функций-членов чисел.
Аналогично для бэкэндов MPFR:
Тип
mpfr_float_backend
может использоваться с фиксированной точностью, указав ненулевой параметр шаблона Digits10, или с переменной точностью, установив аргумент шаблона в ноль.Typedef mpfr_float предоставляет тип переменной точности, точность которого можно контролировать с помощью функций-членов number.
Пример использования динамической точности:
// 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
не определено
Других решений пока нет …