最近,我一直在用 C++ 进行高精度数字运算。我一直在创建一个程序来使用 gmp(gnu 多精度)fork mpir(多精度整数和有理数)计算两个的平方根。当我在 Win32 模式下编译程序(1 个文件,大约 100 行)时,它编译并运行良好,但是当我在 x86 模式下开始遇到溢出时,我尝试切换到 x64 以希望进行更高精度的计算。当我尝试编译时,它给了我 8 个非常相似的链接器错误,例如“在函数 wmain 中遇到未解析的外部符号 __gmpf_get_str”。我在msdn和堆栈溢出之类的地方搜索和搜索,但是尽管我花了几个小时,但没有这样的运气。这是代码:
// SquareRootFast.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<sstream>
#include<malloc.h>
#include<cstdlib>
#include<mpir.h>
#include<fstream>
#include<iostream>
#include"mpir.cpp"
using namespace std;
char* __cdecl getstr(mpf_t mpf, size_t digits)
{
char* u1 = (char*)malloc(sizeof(char) * 5 * digits);
mp_exp_t* u2 = (mp_exp_t*)malloc(sizeof(long));
char* alpha = __gmpf_get_str(u1, u2, 10, digits, mpf);
return alpha;
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned long precspec = 1024 * 1024 * 256;
mpf_set_default_prec(precspec);
mpf_t sqrt;
mpf_init(sqrt);
mpf_set_d(sqrt, 1);
mpf_t one;
mpf_init(one);
mpf_set_d(one, 1);
mpf_t two;
mpf_init(two);
mpf_set_d(two, 2);
long long int count = 0;
while(count < 28)
{
mpf_t parta;
mpf_init_set_ui(parta, 0);
mpf_t partb;
mpf_init_set_ui(partb, 0);
mpf_div(parta, sqrt, two);
printf("Part A complete\n");
mpf_div(partb, one, sqrt);
printf("Part B complete\n");
mpf_add(sqrt, parta, partb);
printf(getstr(sqrt, 1000));
printf("\n");
count++;
printf("%d\n", count);
}
ofstream writer;
writer.open("C:\\Users\\Ben-4\\sqrt2(3).txt");
writer << getstr(sqrt, 1000000000);
writer.close();
}