我正在编写一个生成2的平方根数字的工具。我使用的库是GMP来获得更多数字。我用1.4Ghz的双核和3.4Ghz的四核调试程序。我还用函数调用之前和之后使用的time(0)函数测量了时间,然后我减去了结果。我注意到,当我在不同的PC上尝试使用不同的CPU时,完全没有时间差异。也许我需要启用像多线程这样的东西,或者它使用CPU的全部功能。我还应该提到,所有内容都是使用链接器标志-lgmp与GCC编译的。
这是代码
/*
* sqrt2.c
*
* Created on: 18.02.2015
* Author: iPh1ps99
*/
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include "helper.h"
/*
* @param decimals: Holds the amount of digits
* @return Returns the malloc'd string holding the digits
*/
char *sqrt2(unsigned long decimals) {
mpf_t result;
mp_exp_t exp;
char *output;
/*
* Initializing
*/
mpf_set_default_prec(decimals * BINARYLOG10);
mpf_inits(result, NULL);
/*
* Calculation
*/
mpf_sqrt_ui(result, 2);
/*
* Converting number to a string
*/
output = mpf_get_str(NULL, &exp, 10, 0, result);
/*
* Cleaning up
*/
mpf_clears(result, NULL);
return output;
}
这就是我如何调用函数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "helper.h"
int main() {
unsigned long decimals = 100000000;
char *output = NULL;
FILE *out = NULL;
out = fopen("sqrt2.txt", "w");
if (out == NULL) {
printf("Error occured while opening file!");
return 1;
}
int start = time(NULL);
output = sqrt2(decimals);
int end = time(NULL);
fprintf(out, "%.1s.%s\n", output, output + 1);
printf("It took me about %d seconds to calculate %lu decimals\n", end - start,
decimals);
fclose(out);
free(output);
return 0;
}