c++ - 什么是精度?

标签 c++ precision mpfr

对于这个非常简单的问题,我无法在维基百科(或 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/

相关文章:

c++ - 在函数中将其用作缓冲区时获取 char* 中的垃圾数据

Java断言双包含序列

c++ - 如何在 boost::multiprecision::mpfr 中使用复数?

c++ - 为什么 "int"变量不打印负零?

c++ - 从文件中读取二进制给出负数

c++ - 登录 cpp 14 和 17

c++ - 使用 MPFR 将 float 转换为字符串

c++ - 使用 MPFR 时如何在 Boost Multi precision 中设置舍入模式

c++ - 在eclipse中调试

excel - 如何模拟 Excel 的自动舍入?