我刚刚在我的 Mac 上安装了 gmp 多精度算术库。每当我编译程序时,我都会收到此警告:
warning: implicit declaration of function '__gmpz_out_str' is
invalid in C99 [-Wimplicit-function-declaration]
mpz_out_str(stdout,10,p);
/usr/local/include/gmp.h:951:21: note: expanded from macro 'mpz_out_str'
#define mpz_out_str __gmpz_out_str
Run Code Online (Sandbox Code Playgroud)
我将得到一个可以工作的可执行文件,但是当我使用这个特定的函数时我总是得到这个。主文件如下所示:
#include <gmp.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void fact(int n){
int i;
mpz_t p;
mpz_init_set_ui(p,1); /* p = 1 */
for (i=1; i <= n ; ++i){
mpz_mul_ui(p,p,i); /* p = p * i */
}
printf ("%d! = ", n);
mpz_out_str(stdout,10,p);
mpz_clear(p);
}
int main(int argc, char * argv[]){
int n; …Run Code Online (Sandbox Code Playgroud) 我在C++中遇到了问题.我需要一个比标准c ++ double更精确的double.(C++ long double甚至还不够)所以..我发现GNUMP确实让我满意..但..
我如何找到给定数字的基数10的对数..
我想用GMP找到一个非常大的平方根的上限.在C中ceil(sqrt(n)).
整数的GMP平方根截断结果,因此10的平方根将报告为3.浮点平方根按预期工作,但我需要采用下一个最大整数.mpf_get_d向零舍入,但否则做我想要的.如何获得大量平方根的上限?
我正在尝试在我的C和C++程序中使用GMP库.我使用Xcode编写代码.我按照说明在我的机器上安装GMP,最后得到一个包含gmp.h文件的文件夹"〜/ usr/local/gmp-5.0.5".
如何让我的程序看到这个库?如果我决定将我的程序保存在桌面上,例如???
安装gmp-5.0.5的最佳位置在哪里?使用include"gmp.h"将显示错误"找不到文件".
我有一个关于GNU MP的问题,请你帮我解决一下这个问题.我在Windows上使用"GNU Multiple Precision Arithmetic Library"Edition 5.1.1.(MinGW\gcc + MSYS)
存在一个mpz_gcd函数来计算两个整数的"gcd".
void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2);
Run Code Online (Sandbox Code Playgroud)
据我所知,在GNU MP中实现了几种算法来计算最大公约数.其中:
使用的算法似乎是根据整数的输入大小自动选择的.
目前,二进制算法仅在N <3时用于GCD.
对于大于GCD_DC_THRESHOLD的输入,GCD通过HGCD(半GCD)函数计算,作为Lehmer算法的推广.
所以,我想至少有三种不同的方法来获得gcd(a,b).对我来说主要问题是:我想指定自己使用哪种算法.我会在随机大输入(即10 ^ 5位)上比较这些算法的时间执行情况,以找出一些常见趋势:使用"二进制GCD"变得比"Lehmer方法"更差的那一点是"HGCD-Lehmer"概括"真的比直截了当的莱默等更好.
有没有简单的方法来指定您想要使用的算法?任何方法从库中提取此算法,任何方式来修改一些"#define"变量.是否可以在没有库重新编译的情况下执行我想要的操作?我只是初学者,我觉得无法弄清楚图书馆里面的各种事情.
PS可能有人会对此产生什么感兴趣.我在github上有一些代码:https://github.com/int000h/gcd_gcc
使用gmp,我声明:
mpz_class x = 0;
Run Code Online (Sandbox Code Playgroud)
但是现在如果我想用x作为数组的索引,就像这样:
textArray[x];
Run Code Online (Sandbox Code Playgroud)
我收到此错误"错误:'testArray [x]'中'运算符[]'不匹配"
那么我该如何解决这个问题呢?
我是C++的新手,我必须处理大整数,所以我必须通过Cygwin安装GMP.
我在安装时可以找到的任何文档都假设你知道你在说什么,而我却不知道.
无论如何,我得到了正确的.tar或其他什么,正确地提取它,现在我看到的任何网站都说要运行./configure --prefix=${gmp_install}...
世界上到底是gmp_install什么?我configure从哪个目录运行?咦?我可以从我的小Cygwin终端运行它,但它只是说没有这样的文件.
接下来,我应该输入make.来自哪里?
救命...
如何在C中的文件中保存mpf_t或mpz_t类型的GMP对象?或者我如何访问这些类型的已分配内存块,以便我可以将它们直接写入文件?
fwrite(&gmp_obj->_mp_size, sizeof(long), 1, fout);
fwrite(&gmp_obj->_mp_prec, sizeof(long), 1, fout);
fwrite(&gmp_obj->_mp_exp, sizeof(long), 1, fout);
fwrite(gmp_obj->_mp_d, sizeof(long), gmp_obj->_mp_size, fout);
Run Code Online (Sandbox Code Playgroud) 据我所知,GMPY2支持GMP库,而numpy拥有快速数值库.我想知道速度与用GMP实际编写C(或C++)代码相比如何.由于Python是一种脚本语言,我认为它不会像编译语言一样快,但我之前对这些概括我错了.
我不能让GMP在我的电脑上工作,所以我不能进行任何测试.如果可以,只需要一般数学,如加法,也许还有一些触发功能.我稍后会弄清楚GMP.
我有一个程序,从字符串中读取数字到mpz_t,然后将其转换为mpf_t.尽管从文件中正确读取,但是当我将它们转换为mpf_t时会出现精度损失.代码如下:
#include <gmp.h>
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char **argv) {
char* str = "632512364206354367378453";
mpz_t x;
mpz_init_set_str(x, str, 10);
mpf_t a;
mpf_init(a);
mpf_set_z(a, x);
gmp_printf("mpz_t: %Zd\n", x);
gmp_printf("mpf_t: %Ff\n", a);
}
Run Code Online (Sandbox Code Playgroud)
此示例的输出是:
mpz_t: 632512364206354367378453
mpf_t: 632512364206354367378000.000000
Run Code Online (Sandbox Code Playgroud)
如您所见,最后3位数字不正确.我怎么能避免这个?还有其他功能可以执行此转换吗?
谢谢