2017-02-13 38 views
-1

我继承了用C语言编写的项目,该项目使用映射到来自GNU多精度算术库的多精度浮点数的实数类型GMP)。如何获得使用GMP在C中定义的实数类型编号的字节计数部分

在运行时,以测试该实数类型的字节数,我可以运行:

printf("Storage size for Real type: %d bytes\n", sizeof(Real)); 

给出24个字节,即192个比特。

然而,定义的类也文件具有以下行:

#define REAL_EPSILON 1e-24 
#define REAL_FORMAT "% 25.24Fe" 
#define REAL_IOTA 1e-96 
#define REAL_PRECISION 128 

任何人都可以摆脱这些线路上的任何轻?我特别关心最后一行是否表示128位或16字节赋予数字小数部分的字节数。

+0

这意味着尾数有16个字节,但是'Real'结构还包括指数和符号的成员,以及其他的东西。这些是其他8个字节。 – Barmar

+0

@Barnar:让我确保我理解你:你是否认为我认为16个字节是小数是基本正确的? –

+0

是的,我认为是。如果您想确定,请检查源代码并查看“Real”的结构声明。 – Barmar

回答

2

背后GMP理念,GNU 精密运算库,是它可以处理多个(非常大)精度。因此,sizeof为其浮点数据类型返回的固定大小没有意义。

GMP号码是使用头结构实现的,带有一个或多个指向实际数据的指针,其中存储了实际的数字。这可能是非常大的数字,存储数千或数百万位。

sizeof是一个内置的C运算符,它只是给出头结构的大小。这个结果只是表示头结构是24个字节。它确实有而不是与精确度或数字位数有关。

+0

@MrMorgan:如在'mpf_set_default_prec(128);'?这会将默认精度设置为(至少)128位。 –

+0

我需要检查这样一个明确的指令。有哪些文档说明使用默认的128位精度。 –

+0

调用GMP的代码设置它。在这里阅读更多信息:https://gmplib.org/manual/Floating_002dpoint-Functions.html#Floating_002dpoint-Functions –

相关问题