我正在使用 GNU 多精度 (GMP) 库对任意精度整数执行一些计算。然后我需要结果的十进制数字。但不是全部:只是,比方说,一百个最高有效数字(即数字开头的数字)或数字中间的选定数字范围(例如 1000 中的数字 100..200 -数字)。
GMP有什么办法吗?
我在文档中找不到任何函数来提取一系列十进制数字作为字符串。mpz_t
转换为字符串的转换函数总是转换整数。只能指定基数,但不能指定起始/结束数字。
除了将整个数字转换成一个巨大的字符串,只取一小部分并扔掉其余部分之外,还有什么更好的方法吗?
编辑:我需要的不是控制我的数字的精度或将其限制为特定的固定位数,而是从任意精度的数字字符串中选择一个数字子集。
这是我需要的一个例子:
7 1316831 = 19821203202357042996...2076482743
实际数字有 1112852 位,我将其收缩到...
.
现在,我只需要这个庞大的数字字符串中任意选择的子字符串。例如,十个最高有效数字(1982120320
在这种情况下)。或者从 1112841到 1112849的数字(21203202
在这种情况下)。或者在第 1112841个位置(2
在这种情况下)只有一个数字。
如果我首先用 将我的 GMP 数字转换为一串十进制数字mpz_get_str
,我将不得不为这些数字分配大量内存,只使用其中的一小部分并丢弃其余数字。(更不用说mpz_t
二进制表示的原始数字已经吃掉了很多。)