MPFR:如何制作 mpfr_t 的精确副本?
MPFR: How to make an exact copy of mpfr_t?
我只是不知道如何用 MPFR 制作 mpfr_t
的精确副本 3.1.4:相同的精度,完全相同的值,没有舍入。
void copy (mpfr_t x)
{
mpfr_t y;
mpfr_init2 (y, mpfr_get_prec (x));
// Bummer: mpfr_set will round.
}
最好的方法是像您一样设置精度后使用 mpfr_set
。不会进行舍入,或者如果您愿意,舍入操作不会修改值。如果值为 NaN,则不会复制其符号位,但您可能不关心(如果您真的关心,您仍然可以使用 mpfr_copysign
复制符号位)。
不要用 memcpy
或类似的东西复制 mpfr_t
。复制后您将获得相同的值,但有效数字将由两个数字共享(因为一个字段是指向有效数字的指针),并且修改其中一个数字将修改另一个数字,您将得到一个如果数字更改为特殊值(NaN、±Inf、±0)或其精度发生变化,则行为会更加不稳定(可能会崩溃...)。
我只是不知道如何用 MPFR 制作 mpfr_t
的精确副本 3.1.4:相同的精度,完全相同的值,没有舍入。
void copy (mpfr_t x)
{
mpfr_t y;
mpfr_init2 (y, mpfr_get_prec (x));
// Bummer: mpfr_set will round.
}
最好的方法是像您一样设置精度后使用 mpfr_set
。不会进行舍入,或者如果您愿意,舍入操作不会修改值。如果值为 NaN,则不会复制其符号位,但您可能不关心(如果您真的关心,您仍然可以使用 mpfr_copysign
复制符号位)。
不要用 memcpy
或类似的东西复制 mpfr_t
。复制后您将获得相同的值,但有效数字将由两个数字共享(因为一个字段是指向有效数字的指针),并且修改其中一个数字将修改另一个数字,您将得到一个如果数字更改为特殊值(NaN、±Inf、±0)或其精度发生变化,则行为会更加不稳定(可能会崩溃...)。