[Back to MATH SWAG index]  [Back to Main SWAG index]  [Original]

(***** Find the square-root of an Integer between 1..2,145,635,041  *)
(*                                                                  *)
Function FindSqrt({input} lo_in : LongInt) : {output} LongInt;

  (***** SUB : Find square-root For numbers less than 65417.        *)
  (*                                                                *)
  Function FS1({input } wo_in : Word) : {output} Word;
  Var
    wo_Temp : Word;
  begin
    wo_Temp := 1;
    While ((wo_Temp * wo_Temp) < wo_in) do
      inc(wo_Temp, 11);
    While((wo_Temp * wo_Temp) > wo_in) do
      dec(wo_Temp);
    FS1 := wo_Temp
  end;      (* SUB : FS1.                                           *)

  (***** SUB : Find square-root For numbers greater than 65416.     *)
  (*                                                                *)
  Function FS2(lo_in : LongInt) : LongInt;
  Var
    lo_Temp : LongInt;
  begin
    lo_Temp := 1;
    While ((lo_Temp * lo_Temp) < lo_in) do
      inc(lo_Temp, 24);
    While((lo_Temp * lo_Temp) > lo_in) do
      dec(lo_Temp);
    FS2 := lo_Temp
  end;      (* SUB : FS2.                                           *)

begin
  if (lo_in < 64517) then
    FindSqrt := FS1(lo_in)
  else
    FindSqrt := FS2(lo_in)
end;        (* FindSqrt.                                            *)

{
  ...I've now re-written the "seive" Program, and it appears to now
  run about twice as fast. I'll post the new improved source-code in
  another message.
}

[Back to MATH SWAG index]  [Back to Main SWAG index]  [Original]