什么是精度

what is precision?

本文关键字:精度 什么      更新时间:2023-10-16

我无法在维基百科(或SO)或文档中找到这个非常简单问题的答案。

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

我正在使用包装器MPFRC++ C++中的任意精度浮点库MPFR。 可以选择设置默认精度,它采用整数作为参数。

这样的整数是什么意思?

例如:set_default_prec(128) .

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

例如:

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

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

无疑

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指向的块的大小,但结构的大小保持不变。

你想要

的一切都可以通过谷歌搜索"浮点"和"精度"找到。 例如:

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")的机制。