Article View: chile.comp.programacion
Article #2583Re: Portar codigo C entre maquinas de 32/64 bits?
From: Andres E. Hernando
Date: Tue, 13 Dec 2005 05:45
Date: Tue, 13 Dec 2005 05:45
85 lines
4269 bytes
4269 bytes
On 12 Dec 2005 23:55:53 -0400, "Jos? Miguel Santib??ez" wrote: > En el cap?tulo anterior (news:40656sF18epvjU1@individual.net), "Andres E. > Hernando" <NOherSPnandoAM@fas.harvard.edu> dijo: > >> Hola! >> >> Seguro que estoy poniendo en evidencia lo oxidado que >> estoy, pero mi copia del Kernighan y Ritchie esta juntando >> polvo en Chile y necesito arreglar esto antes de irme... >> >> Bueno, por alguna razon (no importa cual) tengo que >> usar un generador de numeros pseudoaleatorios externo en >> Matlab. Por un tema de eficiencia, lo estoy haciendo en C >> usando mex files. >> >> El PRNG (Pseudo Random Number Generator) que tengo que >> usar es una version de KISS (Keep It Simple, Stupid) que usa >> operaciones de bits en uno de sus generadores. Basicamente, >> la siguientes lineas: >> >> y ^= y << 13; >> y ^= y >> 17; >> y ^= y << 5; >> >> Donde y es un numero de 32 bits... Y aqui esta todo >> mi problema, porque tengo que compartir esto y tiene que >> funcionar igual en maquinas de 32 y de 64 bits. Por lo que >> declarar y como "unsigned long int" no me funciona ya que >> en la maquina Linux donde tiene que correr, un "unsigned >> long int" es de 64 bits, asi que los shifts/xor me generan >> resultados distintos en cada maquina. >> >> Estoy seguro que debe haber una forma de asegurarme >> que y es siempre de 32 bits independiente de la arquitectura, >> pero hace como 4 annos que no programo en C... Algun puntero >> a la ayuda adecuada? >> > > Puede que la mia sea una pregunta weona, pero si es un PRNG, no veo cual es > el error de que entregue resultados diferentes en cada m?quina.... No es la primera vez que me hacen la pregunta, y no, no es una pregunta 'weona'... Lo que pasa es que tengo un proceso de bootstrap que corre en Stata que es un paquete estadistico que usa esta implementacion particular de KISS. Despues, tengo el mismo proceso con una etapa mas corriendo en Matlab y quiero que los resultados sean comparables mas alla de la muestra (la razon de correrlo en Matlab es que la etapa extra requiere de una optimizacion no lineal en un espacio de 36 parametros, Matlab es mucho mas eficiente haciendo eso que Stata). Por eso necesito que tanto Stata como Matlab generen la misma muestra en cada simulacion. Cada simulacion requiere de +/- 36.000.000 de PRN, por eso necesito tener un PRNG con caracteristicas conocidas (y que esten acomplados en ambas aplicaciones de modo de poder comparar). En el fondo, quiero un experimento pseudo aleatorio, pero que sea repetible (i.e. si pongo la misma semilla en ambos programas me generen la misma secuencia de PRN). Se entiende? > > En todo caso, yo revisar?a la doc de la plataforma para buscar el > equivalente (INT32?) Por ahora lo que hice fue eso, pero ahora tengo dos versiones de las rutinas, una que usa UINT en la maquina de 64 bits y otra que usa ULINT en la de 32. Despues cache que da +/- lo mismo porque en la de 32 ULINT = UINT. Pero si a alguien se le ocurre tirarlas a correr en un bicho distinto puede que ya no sea lo mismo... En fin, todavia esta corriendo, cuando pare voy a tratar de implementar todo usando arreglos de chars como sugirieron por ahi. Saludos, AHG. -- Mi sig could kick your sig's butt anyday! msn: a_hernand@msn.com http://diferenciados.blogspot.com/ <-- mi huebloj! http://www.humanclock.com/clock.php <-- mi reloj!
Technical Details
Message-ID:
<4075f1F18utn8U1@individual.net>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mailReferences:
<40656sF18epvjU1@individual.net> <Xns972B13AEF2F27jmsnews@200.27.221.71>Show Full Headers
Complete Article Headers
X-Google-Thread: 1593cb,88c16e828b86c7df
X-Google-Attributes: gid1593cb,public
X-Google-Language: SPANISH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: "Andres E. Hernando" <NOherSPnandoAM@fas.harvard.edu>
Newsgroups: chile.comp.programacion
Subject: Re: Portar codigo C entre maquinas de 32/64 bits?
Date: 13 Dec 2005 05:45:06 GMT
Lines: 85
Message-ID: <4075f1F18utn8U1@individual.net>
References: <40656sF18epvjU1@individual.net> <Xns972B13AEF2F27jmsnews@200.27.221.71>
X-Trace: individual.net GuT8ewh93bhYLxez+/pl/AWqJ/qVtgTHfwsBg9gUEE3Ir/nbeQ
X-Orig-Path: not-for-mail
User-Agent: tin/1.6.2-20030910 ("Pabbay") (UNIX) (CYGWIN_NT-5.1/1.5.18(0.132/4/2) (i686))