windows — Средство поиска квадратного корня (использует mpir, написанный на c ++) завершается ошибкой с множественными ошибками компоновщика lnk2019 при компиляции в x64

В последнее время я занимаюсь обработкой чисел с высокой точностью в c ++. Я создавал программу для вычисления квадратного корня из двух, используя gmp (gnu множественной точности) форк mpir (целые числа с множественной точностью и рациональные числа). Когда я компилирую программу (1 файл, около 100 строк) в режиме Win32, она компилируется и работает нормально, но когда я столкнулся с переполнением в режиме x86, я попытался перейти на x64 в надежде на более точные вычисления. Когда я попытался скомпилировать, он дал мне 8 очень похожих ошибок компоновщика, таких как «неразрешенный внешний символ __gmpf_get_str, обнаруженный в функции wmain». Я искал и искал в таких местах, как 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();
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]