0

对于这个非常简单的问题,我无法在 Wikipedia(或 SO)或文档中找到答案。

整数表示的浮点数的精度如何?

我在. MPFRC++_ 可以选择设置默认精度,它需要一个整数作为参数。MPFRC++

这样的整数是什么意思?

例如: set_default_prec(128)

另外,我检查了sizeof各种默认精度,但它们似乎总是一样的?为什么?

例如:

set_default_prec(128); sizeof(mpfr::mpreal); // 16

set_default_prec(4096); sizeof(mpfr::mpreal); // 还是 16...

4

2 回答 2

5

set_default_prec无疑会改变分配用于存储数据的存储量(位数)。存储一个十进制数字大约需要 3.5 位,所以从那里你只需使用简单的数学来计算给定位数需要多少字节。

sizeof保持不变而言,毫无疑问,您有一个结构(或类),它只包含一个指向实际数据的指针,按照这个一般顺序:

namespace mpfr {
    struct real { 
        char *data;
        size_t size_allocated;
        size_t size_inuse;
        size_t num_digits;
    };
}

当您更改精度时,它会修改存储在 num_digits 中的值,以及可能data指向的块的大小,但结构的大小保持不变。

于 2012-04-23T18:47:52.813 回答
1

谷歌搜索“浮点”和“精度”可以找到您想要的一切。例如:

http://en.wikipedia.org/wiki/Floating_point

浮点表示在概念上类似于科学记数法。从逻辑上讲,浮点数包括:

给定基数(或基数)中给定长度的有符号数字字符串。这个数字串被称为有效数、系数,或者较少见的尾数(见下文)。有效数字的长度决定了数字可以表示的精度。假设小数点位置总是在有效数字内的某个位置——通常就在最高有效数字之后或之前,或者在最右边(最低有效数字)的右侧。本文通常会遵循小数点位于最高有效(最左边)数字之后的约定。

换句话说:

  1. 浮点数是“近似值”,不一定是精确

  2. 浮点数的“精度”决定了近似值的准确性。更多位意味着更高的精度(您的数字“更准确”)。更少的位意味着更少的精度(数字“更四舍五入”)。

  3. “精度”的数量可以并且表示为整数。

从 MPFR 网站:

http://www.mpfr.org/mpfr-current/mpfr.html#MPFR-Basics

浮点数,或简称浮点数,是具有有限精度指数的任意精度有效数(也称为尾数)。...

精度是用来表示浮点数的有效位的位数;对应的 C 数据类型是 mpfr_prec_t。精度可以是 MPFR_PREC_MIN 和 MPFR_PREC_MAX 之间的任何整数。在当前实现中,MPFR_PREC_MIN 等于 2。 ...

当然,“set_default_prec()”是改变精度的机制(从“2”开始)。

于 2012-04-23T18:46:48.470 回答