我需要在 FreePascal 中使用非常大的数字(例如 INT64)来处理 round 或 trunc 函数

I need to work with round or trunc functions in FreePascal with very big numbers(such as INT64)

var a,c,i,y,k:cardinal;
    z:real;
    check:boolean;
    repet:array[1..1000] of cardinal;
    tripet:array[1..1000,1..2] of real;
begin
read(c);
i:=1;
for a:=1 to (c) do
  begin
    z:= sqrt(c*c-a*a);
    if (c=round(z)) or (round(z)=0) then continue;
    if z=round(z) then
      begin
        check:=false;
        for k:=1 to i do if repet[k]=z then check:=true;
        if (check) then continue;
        tripet[i][1]:=a;
        tripet[i][2]:=z;
        repet[i]:=a;
        i:=i+1;
      end;
  end;
if i=1 then write('Nope');
for y:=1 to (i-1) do writeln(tripet[y][1]:0:0,' ',tripet[y][2]:0:0);
end.

问题出在 round(z) 中,它带来了太大的 z number.It 需要 Int32 类型。

但我需要更大的 number:for 距离值可以在 1 到 10^12

之间

我该如何解决?

您使用的是 32 位类型的 cardinal,可能找到了匹配的回合。尝试使用 64 位类型或使用 int64(c)=round(z) 强制 64 位舍入?