对于这个非常简单的问题,我无法在维基百科(或 SO)或文档中找到答案。
用整数表示 float 的精度如何?
我在 C++
中的任意精度浮点库 MPFR
上使用包装器 MPFRC++
。可以选择设置默认精度,它需要一个整数作为参数。
这样的整数是什么意思?
例如: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
指向的 block 的大小,但结构的大小保持不变。
关于c++ - 什么是精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286316/