标签: gmp

警告:函数“__gmpz_out_str”的隐式声明在 C99 中无效

我刚刚在我的 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 warnings compilation gmp

3
推荐指数
1
解决办法
2202
查看次数

使用GNUMP如何找到base10的对数

我在C++中遇到了问题.我需要一个比标准c ++ double更精确的double.(C++ long double甚至还不够)所以..我发现GNUMP确实让我满意..但..

我如何找到给定数字的基数10的对数..

c++ double gmp bignum

2
推荐指数
1
解决办法
878
查看次数

GMP上限功能

我想用GMP找到一个非常大的平方根的上限.在C中ceil(sqrt(n)).

整数的GMP平方根截断结果,因此10的平方根将报告为3.浮点平方根按预期工作,但我需要采用下一个最大整数.mpf_get_d向零舍入,但否则做我想要的.如何获得大量平方根的上限?

c math gmp

2
推荐指数
1
解决办法
1003
查看次数

使用Xcode在MacOS X上安装GMP

我正在尝试在我的C和C++程序中使用GMP库.我使用Xcode编写代码.我按照说明在我的机器上安装GMP,最后得到一个包含gmp.h文件的文件夹"〜/ usr/local/gmp-5.0.5".

如何让我的程序看到这个库?如果我决定将我的程序保存在桌面上,例如???

安装gmp-5.0.5的最佳位置在哪里?使用include"gmp.h"将显示错误"找不到文件".

c c++ macos gmp xcode4

2
推荐指数
2
解决办法
1万
查看次数

GNU MP库的GCD计算问题

我有一个关于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中实现了几种算法来计算最大公约数.其中:

  • 二进制GCD
  • 莱默的算法
  • 次级GCD

使用的算法似乎是根据整数的输入大小自动选择的.

目前,二进制算法仅在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

c algorithm gmp greatest-common-divisor

2
推荐指数
1
解决办法
1073
查看次数

将mpz_class转换为int

使用gmp,我声明:

mpz_class x = 0;
Run Code Online (Sandbox Code Playgroud)

但是现在如果我想用x作为数组的索引,就像这样:

textArray[x];
Run Code Online (Sandbox Code Playgroud)

我收到此错误"错误:'testArray [x]'中'运算符[]'不匹配"

那么我该如何解决这个问题呢?

c++ gmp

2
推荐指数
1
解决办法
3227
查看次数

使用cygwin在Windows上安装GMP

我是C++的新手,我必须处理大整数,所以我必须通过Cygwin安装GMP.

我在安装时可以找到的任何文档都假设你知道你在说什么,而我却不知道.

无论如何,我得到了正确的.tar或其他什么,正确地提取它,现在我看到的任何网站都说要运行./configure --prefix=${gmp_install}...

世界上到底是gmp_install什么?我configure从哪个目录运行?咦?我可以从我的小Cygwin终端运行它,但它只是说没有这样的文件.

接下来,我应该输入make.来自哪里?

救命...

c++ cygwin makefile autotools gmp

2
推荐指数
1
解决办法
5705
查看次数

在文件中存储GMP mpf_t和mpz_t类型

如何在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)

c file gmp storing-data

2
推荐指数
1
解决办法
1129
查看次数

numpy和GMPY2在速度方面与GMP相比如何?

据我所知,GMPY2支持GMP库,而numpy拥有快速数值库.我想知道速度与用GMP实际编写C(或C++)代码相比如何.由于Python是一种脚本语言,我认为它不会像编译语言一样快,但我之前对这些概括我错了.

我不能让GMP在我的电脑上工作,所以我不能进行任何测试.如果可以,只需要一般数学,如加法,也许还有一些触发功能.我稍后会弄清楚GMP.

c python numpy gmp gmpy

2
推荐指数
1
解决办法
1354
查看次数

使用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位数字不正确.我怎么能避免这个?还有其他功能可以执行此转换吗?

谢谢

c c++ precision gmp floating-point-precision

2
推荐指数
1
解决办法
276
查看次数