gmp 변수에서 기계 정밀도를 얻으려고합니다. 이를 위해gmp 임의 정밀도에서 기계 정밀도를 계산하십시오
, 난 고정 정밀도와 GMP의 정확도를 계산하기 wikipedia에서 코드를 적응 그러나
int main(int argc, char **argv)
{
long int precision = 100;
mpf_set_default_prec(precision); // in principle redundant, but who cares
mpf_t machEps, one, temp; // "one" is the "1" in gmp. tmp is to comparison.
mpf_init2(machEps, precision);
mpf_set_ui(machEps, 1); // eps = 1
mpf_init_set(one,machEps); // ensure "one" has the same precision as machEps
mpf_init_set(temp,machEps); // ensure "temp" has the same precision as machEps
do {
mpf_div_ui(machEps,machEps,2); // eps = eps/2
mpf_div_ui(temp,machEps,2); // temp = eps/2
mpf_add(temp,temp,one); // temp += 1
}
while (mpf_cmp(temp,one)); // temp == 1
/// print the result...
char *t = new char[400];
mp_exp_t expprt;
mpf_get_str(NULL, &expprt, 10, 10, machEps);
sprintf(t, "%se%ld", mpf_get_str(NULL, &expprt, 10, mpf_get_default_prec(), machEps), expprt);
printf("Calculated Machine epsilon: %s\n", t);
return 0;
}
결과는 위키의 화학식과 일치하지 않는 상기와도 변화 정밀도를 설정합니다. 내가 뭘 놓치고 있니? 나는 double과 float (C 표준)으로 시도했는데 그 결과는 정확합니다 ...
내 결과는 귀하의 동의와 일치합니다. "그러나 가치와 효과적인 정밀도는 사지 경계를 넘을 때만 변한다"는 것을 의미합니다. 대답에 대해 설명해 주시겠습니까? 분명히 그것은 내 문제 였고, 나는이 분리 된 단계가 왜 있는지 모른다. (또는 "limb-boundary"에 대한 참조) 어쨌든 덕분에 많은 도움이되었습니다! –
좋아, 설명을 추가합니다. –
설명이 추가되었습니다. –