gracias me sirvio he hecho esta parte y la he probado los primeros valores de X me lo a igual en c pero despues me lo va dando diferente. no se que he hecho mal.
gracias ecfisa por tu ayuda.
Código Delphi
[-]
const LEN = 607;
const TAP = 273;
const MASK = LongInt($7fffffff);
const A = 48271;
const M = 2147483647;
const Q = 44488;
const R = 3399;
var
rng_vec : array[0..LEN-1] of ulong;
rng_tap:PULONG = @rng_vec;
rng_feed:PULONG = 0;
function isrand(_seed:LongInt):Integer;
var
lo, hi, x, seed:LongInt;
i:Integer;
begin
seed:=LongInt(_seed);
rng_tap := @rng_vec;
rng_feed := @rng_vec[LEN - TAP];
seed := seed mod M;
if(seed < 0) then
seed:= seed + M;
if(seed = 0) then
seed := 89482311;
x := seed;
i:= -20;
while i < LEN do
begin
hi := LongInt(trunc( x / Q));
lo := LongInt(x mod Q);
x := LongInt((A*lo) - (R*hi));
if(x < 0) then
x:= x+M;
if(i >= 0) then
rng_vec[i]:= x;
i:=i+1;
end;
end;
Cita:
Empezado por ecfisa
Hola mastersolid.
Así, a primera vista, la función isrand tiene indefinido el valor de retorno.
Yo lo declararía:
Código Delphi [-]
rng_vec : array [0..LEN] of Cardinal;
En C un nombre de array sin especificar índice, hace referencia a la posición cero ([0]) del mismo, creo entonces, que el equivalente Delphi podría ser:
Código Delphi [-]
rng_feed := @rng_vec[LEN - TAP];
Saludos.
|
gracias por la sugerencia. Ya lo hice en dll, pero quiero pornerlo mas pro. y quiero integrarlo al delphi y no estar en dll. es una meta que me he puesto de portar ese codigo a delphi. asi aprendo mas de ambos lenguaje.
gracias.
Cita:
Empezado por cmm07
Otra solución podría ser crear desde c un dll y llamarla desde delphi
|