In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Pregunta para satisfacer mi calenturienta mente...

Foro público de Xailer en español
Responder
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Pregunta para satisfacer mi calenturienta mente...

Mensaje por Manu Exposito »

Qué es más rápido...
esto:
if( uiIndex > 0 && uiIndex <= hDS->uiColCount )
o esto:
if( !( uiIndex < 1 || uiIndex > hDS->uiColCount ) )
?????????????
Se supone que las dos son equivalentes en cuanto al resultado, pero cual
es más rápido en la ejecución?
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Pregunta para satisfacer mi calenturienta mente...

Mensaje por jose.luis »

Hola Manu,
Yo creo que la segunda forma
> if( !( uiIndex < 1 || uiIndex > hDS->uiColCount ) )
por que entiendo que
1. primero hace una sola comparacion (mayor que)
uiIndex > hDS->uiColCount
2. si se cumple, no continúa con la segunda comparación.
En cambio, con la primera forma
> if( uiIndex > 0 && uiIndex <= hDS->uiColCount )
1. tiene que hacer dos comparaciones (menor que e igual que) y si se cumple
uiIndex <= hDS->uiColCount
2. forzosamente tiene que hacer la siguiente comprobación.
Aunque, mirando ambos, veo que todo depende de la distribución de las
comprobaciones a hacer....
Saludos,
José Luis Capel
En la primera forma tiene que comprobar
"Manu" <messoft@gmail.com> escribió en el mensaje
news:[email=49922d6b@svctag-j7w3v3j....]49922d6b@svctag-j7w3v3j....[/email]
> Qué es más rápido...
> esto:
> if( uiIndex > 0 && uiIndex <= hDS->uiColCount )
> o esto:
> if( !( uiIndex < 1 || uiIndex > hDS->uiColCount ) )
>
> ?????????????
>
> Se supone que las dos son equivalentes en cuanto al resultado, pero cual
> es más rápido en la ejecución?
notengo
Mensajes: 417
Registrado: Vie Oct 12, 2007 1:29 pm

Pregunta para satisfacer mi calenturienta mente...

Mensaje por notengo »

Manu,
compila con la opción de generar la salida en ensamblador y mira el código
generado. Esto es lo que genera (está simplificado) con tu código de
ejemplo (cambiando hDS->uiColCount por uiColCount):
; if( uiIndex > 0 && uiIndex <= uiColCount )
test eax,eax
jbe short @4
cmp edx,eax
; if( !( uiIndex < 1 || uiIndex > uiColCount ) )
cmp eax,1
jb short @7
cmp edx,eax
Puedes mirar cuánto "tiempo" tarda en ejecutarse cada instrucción en
ensamblador pero yo no me calentarí­a mucho la cabeza con eso. Los
compiladores optimizan el código generado (en el código anterior no he
utilizado ningún flag para optimizar) todo lo que pueden y la diferencia
sólo serán unos milisegundos.
Saludos,
José Lalí­n
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Pregunta para satisfacer mi calenturienta mente...

Mensaje por Manu Exposito »

Gracias por tu opinión...
Tambien esta esta:
unsigned int uiIndex = hb_parni( 2 ); // Así­ está definida
if( uiIndex && uiIndex <= hDS->uiColCount )
o esta
if( uiIndex && !( uiIndex > hDS->uiColCount ) )
Walter, José... opinad!!!
:-)
José Luis Capel escribió:
> Hola Manu,
>
> Yo creo que la segunda forma
>
>> if( !( uiIndex < 1 || uiIndex > hDS->uiColCount ) )
>
> por que entiendo que
>
> 1. primero hace una sola comparacion (mayor que)
> uiIndex > hDS->uiColCount
> 2. si se cumple, no continúa con la segunda comparación.
>
> En cambio, con la primera forma
>
>> if( uiIndex > 0 && uiIndex <= hDS->uiColCount )
>
> 1. tiene que hacer dos comparaciones (menor que e igual que) y si se cumple
> uiIndex <= hDS->uiColCount
> 2. forzosamente tiene que hacer la siguiente comprobación.
>
>
> Aunque, mirando ambos, veo que todo depende de la distribución de las
> comprobaciones a hacer....
>
> Saludos,
> José Luis Capel
>
>
>
> En la primera forma tiene que comprobar
> "Manu" <messoft@gmail.com> escribió en el mensaje
> news:[email=49922d6b@svctag-j7w3v3j....]49922d6b@svctag-j7w3v3j....[/email]
>> Qué es más rápido...
>> esto:
>> if( uiIndex > 0 && uiIndex <= hDS->uiColCount )
>> o esto:
>> if( !( uiIndex < 1 || uiIndex > hDS->uiColCount ) )
>>
>> ?????????????
>>
>> Se supone que las dos son equivalentes en cuanto al resultado, pero cual
>> es más rápido en la ejecución?
>
>
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Pregunta para satisfacer mi calenturienta mente...

Mensaje por Manu Exposito »

Gracias José, esperaba tu opinión :-)
José Lalí­n escribió:
>
> Manu,
>
> compila con la opción de generar la salida en ensamblador y mira el
> código generado. Esto es lo que genera (está simplificado) con tu código
> de ejemplo (cambiando hDS->uiColCount por uiColCount):
>
> ; if( uiIndex > 0 && uiIndex <= uiColCount )
> test eax,eax
> jbe short @4
> cmp edx,eax
>
> ; if( !( uiIndex < 1 || uiIndex > uiColCount ) )
> cmp eax,1
> jb short @7
> cmp edx,eax
>
> Puedes mirar cuánto "tiempo" tarda en ejecutarse cada instrucción en
> ensamblador pero yo no me calentarí­a mucho la cabeza con eso. Los
> compiladores optimizan el código generado (en el código anterior no he
> utilizado ningún flag para optimizar) todo lo que pueden y la diferencia
> sólo serán unos milisegundos.
>
> Saludos,
> José Lalí­n
Responder