我无法在维基百科(或SO)或文档中找到这个非常简单的问题的答案。
浮点数的精度如何用整数表示?
我在MPFRC++
中的任意精度浮点库MPFR
上使用包装器C++
。可以选择设置默认精度,它以整数作为参数。
这样的整数是什么意思?
例如:set_default_prec(128)
。
另外,我检查sizeof
的各种默认精度,但它们似乎总是相同?为什么呢?
e.g:
set_default_prec(128); 的sizeof(MPFR :: mpreal); // 16
set_default_prec(4096); 的sizeof(MPFR :: mpreal); //还是16 ......
答案 0 :(得分: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
指向的块的大小,但结构的大小保持不变。
答案 1 :(得分:1)
你想要的一切都可以通过谷歌搜索找到“浮点”和“精度”。例如:
http://en.wikipedia.org/wiki/Floating_point
浮点表示在概念上与科学相似 符号。逻辑上,浮点数包括:
给定基数(或基数)中给定长度的有符号数字字符串。该数字字符串称为有效数字, 系数或较少的尾数(见下文)。的长度 有效数决定了数字的精确度 表示。假定小数点位置始终为 在有效数字内的某个地方 - 通常在之后或之前 最重要的数字,或最右边的数字(最少) 重要的数字。本文一般将遵循惯例 基数点位于最重要点之后(最左侧) 数字。
换句话说:
浮点数是“近似值”,不一定是完全值
浮点数的“精度”决定了近似值的准确程度。更多位意味着更高的精度(您的数字更“精确”)。较少的位意味着较低的精度(数字“更圆润”)。
“精度”的数量可以并且表示为整数。
来自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”开始)。