什么是精度
what is precision?
我无法在维基百科(或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
浮点表示在概念上类似于科学 表示法。从逻辑上讲,浮点数包括:
给定基数(或基数)中给定长度的有符号数字字符串。此数字字符串称为有效数, 系数,或者,较少见的是尾数(见下文)。长度 有效数确定数字可以达到的精度 代表。假定基数点位置始终为 在显著性的某个地方——通常紧随其后或紧挨着 最高有效数字,或最右边的右侧(最少 显著)数字。本文一般遵循惯例 基数点刚好在最显著的(最左边)之后 数字。
换句话说:
浮点数是"近似值",不一定是精确值
浮点数的"精度"决定了近似值的准确度。 位数越高意味着精度越高(您的数字"更精确")。 位数越少意味着精度越低(数字"更四舍五入")。
"精度"的量可以并且表示为整数。
从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")的机制。
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 如果我在 C++ 中为 int 提供双精度,输入缓冲区中存储了什么?
- 标准库to_string(双精度)在 vs2015 中给出错误的值.有什么解决办法吗?
- 在C++中处理极其精确的浮点计算时,保持精度的标准方法是什么
- 为什么“从'x*'到'y'失去精度”是一个硬错误,什么是适合旧版代码的解决方案
- C++11 中的"auto var = {condition} ? 1 : 1.0"是什么类型?是双精度还是整数?
- 着色器中实现双精度cos()的结果是NaN,但在CPU上运行良好.出了什么问题
- 我可以从双精度中期待什么精度
- 如何将双精度数组从 VB6 传递到 VC++.这段代码有什么问题
- 为什么设置精度做错误?以及什么是设置精度
- 什么更贵?读取或比较整数,双精度
- 什么是精度
- 在 C/C++ 中从双精度到int64_t的隐式转换是什么
- 将int转换为void*会丢失精度,在需要的情况下解决方案是什么
- 使用C++样式转换以所需的精度执行表达式的正确方法是什么
- c++中对包含双精度类型数字的数组进行排序的最快方法是什么?
- c++的长双精度的范围是什么?
- 在 printf() 中,宽度小于精度有什么意义?
- 以二进制格式格式化 2D 双精度矩阵以读取 IDL 的最基本方法是什么?