У меня есть некоторый код, в котором я избегаю некоторых дорогостоящих делений, преобразовывая целое число повышения в двойное. Для реального кода я создам тип fp, достаточно большой, чтобы удерживать максимальное значение (экспонента). Для проверки я использую double. Итак, я делаю это:
#define NTYPE_BITS 512
typedef number<cpp_int_backend<NTYPE_BITS, NTYPE_BITS, unsigned_magnitude, unchecked, void> > NTYPE;
NTYPE a1 = BIG_VALUE;
double a1f = (double)a1;
Код, сгенерированный для этого приведения, довольно сложен. Я вижу, что он в основном перебирает все значения в a1 (сначала наименее значимые), масштабируя их по степени двойки. Теперь в этом случае я предполагаю, что максимальное количество элементов, которые могут повлиять на результат, - это последние два (64 бита для каждого элемента, а самый значимый элемент может иметь менее 64 бит). Есть лучший способ сделать это?
static_cast<double>(a1);вместо приведения типа c. stackoverflow.com/a/29983699/2601293 - person J'e   schedule 04.02.2021