wunderwaffe: тупят другие (karliki)
доктор Вандершпигель ([personal profile] wunderwaffe) wrote2021-04-12 09:20 pm

Freepascal&gmp (повышенная точность вычислений) - 2

Разобрался со статьей про GMP. Автор перепутал в примере перевода длинного числа в строку всё, вообще всё, Наташ.

Пример -

Var
  f: mpf_t;
  n: longword;
  pc: PChar;
  s: AnsiString;
Begin
  mpf_set_default_prec(256);   
  mpf_init_set_str(f, '3.141592653589793238462643383279502884197169399375105820974944', 10);
  pc := mpf_get_str(NIL, n, 0, f);
  s := pc;
  s := Insert('.', s, n+1);   
  WriteLn(s);
End;

1) mpf_get_str имеет пять параметров, на не четыре - 
 mpf_get_str(str:pchar; out exp:mp_exp_t; base:longint; digits:sizeuint; var op:mpf_t):pchar;
2) вызов у автора выглядит так - 
 pc:=mpf_get_str(nil:pchar, n:longword, 0:sizeuint, f:mpf_t);
 Если под n разумеется экспонента, то она должна быть типа mp_exp_t, а не longword.
 Если под n разумеется система счисления, то n должен быть равен 10, например
3) Insert всегда был процедурой, а не функцией.

И пример должен быть таким - 

var pc:PChar;
 s:AnsiString;
 exp:mp_exp_t;
 f: mpf_t;
begin
 mpf_set_default_prec(256);   
 mpf_init_set_str(f, '3.141592653589793238462643383279502884197169399375105820974944', 10);
 exp:=0;
 pc:=mpf_get_str(nil,exp,10,0,f);
 s:=pc;
 insert('.',s,exp+1);
 writeln(s);
end;

https://yadi.sk/d/XQh0Sp-skMuCkw