如何使用 GMP 获取 C 中定义的实型数字的字节计数部分
How to get the byte counts parts of real type number defined in C using GMP
我继承了一个用 C 编写的项目,该项目使用从 GNU 多精度算术库 (GMP) 映射到多精度浮点数的实数类型。
在 运行 时,为了测试这种实数类型的字节数,我可以 运行:
printf("Storage size for Real type: %d bytes\n", sizeof(Real));
给出24个字节,即192位。
但是,定义 class 的文件也有以下几行:
#define REAL_EPSILON 1e-24
#define REAL_FORMAT "% 25.24Fe"
#define REAL_IOTA 1e-96
#define REAL_PRECISION 128
任何人都可以阐明这些行吗?我特别关心最后一行是否表示 128 位或 16 字节被赋予数字的小数部分的字节数。
GMP 背后的想法,即 GNU Multiple 精度算术库,是它可以处理 multiple(和非常大的)精度。因此,对于其 floating-point 数据类型,sizeof
可以 return 的固定大小没有意义。
GMP 数字是使用 header 结构实现的,具有一个或多个指向实际数据的指针,实际数据存储在其中。这可能是非常大的数字,存储了数千或数百万位。
sizeof
是一个 built-in C 运算符,它只给出 header 结构的大小。这个结果只是意味着 header 结构是 24 个字节。它不与精度或位数有任何关系。
我继承了一个用 C 编写的项目,该项目使用从 GNU 多精度算术库 (GMP) 映射到多精度浮点数的实数类型。
在 运行 时,为了测试这种实数类型的字节数,我可以 运行:
printf("Storage size for Real type: %d bytes\n", sizeof(Real));
给出24个字节,即192位。
但是,定义 class 的文件也有以下几行:
#define REAL_EPSILON 1e-24
#define REAL_FORMAT "% 25.24Fe"
#define REAL_IOTA 1e-96
#define REAL_PRECISION 128
任何人都可以阐明这些行吗?我特别关心最后一行是否表示 128 位或 16 字节被赋予数字的小数部分的字节数。
GMP 背后的想法,即 GNU Multiple 精度算术库,是它可以处理 multiple(和非常大的)精度。因此,对于其 floating-point 数据类型,sizeof
可以 return 的固定大小没有意义。
GMP 数字是使用 header 结构实现的,具有一个或多个指向实际数据的指针,实际数据存储在其中。这可能是非常大的数字,存储了数千或数百万位。
sizeof
是一个 built-in C 运算符,它只给出 header 结构的大小。这个结果只是意味着 header 结构是 24 个字节。它不与精度或位数有任何关系。