elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Código más eficiente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Código más eficiente  (Leído 5,554 veces)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Código más eficiente
« Respuesta #10 en: 2 Enero 2012, 01:33 am »

Tambien puedes suplantar max(a, max(b, c)) por:

Código
  1.  
  2. ((a>((b>c)?b:c))?a:((b>c)?b:c))
  3. ///o tambien por (Son identicos solo quite los parentesis cosa NO recomendada!¡):
  4. a>b>c?b:c?a:b>c?b:c
  5.  
  6.  
No. Esto porque el operador ">" tiene mayor prioridad que "?:" y por ello sin paréntesis esta se procesaría así:
Código:
((a > b) > c) ? b ...

Como ya comentaste mejor una función (C++) o macro (C) para obtener el máximo.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.142


I'Love...!¡.


Ver Perfil WWW
Re: Código más eficiente
« Respuesta #11 en: 2 Enero 2012, 06:39 am »

No. Esto porque el operador ">" tiene mayor prioridad que "?:" y por ello sin paréntesis esta se procesaría así:

Creo que dice claramente NO RECOMENDADA...

Dulces Lunas!¡.


En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
tig0

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Código más eficiente
« Respuesta #12 en: 3 Enero 2012, 20:03 pm »

ahi va el mio para sacar el maximo de 8 numeros de 16 bits
Código
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. typedef __declspec(align(8)) struct
  5. {
  6. short _t[4];
  7. }sal;
  8.  
  9. int main()
  10. {
  11.  
  12. sal k, j, e;
  13. k._t[0] = 2;
  14. k._t[1] = 2342;
  15. k._t[2] = 5712;
  16. k._t[3] = 32234;
  17. j._t[0] = 30353;
  18. j._t[1] = 2762;
  19. j._t[2] = 23484;
  20. j._t[3] = 9853;
  21. clock_t start = clock();
  22.  
  23. __asm {
  24. movq mm0, k
  25. movq mm1, j
  26. pmaxsw mm1, mm0
  27. pshufw mm0, mm1, 0x4e
  28. pmaxsw mm1, mm0
  29. pshufw mm0, mm1, 0x11
  30. pmaxsw mm1, mm0
  31. pshufw mm0, mm1, 0x11
  32. pmaxsw mm1, mm0
  33. movq e, mm0
  34. }
  35. clock_t end = clock();
  36. short x = 0;
  37.  
  38. std::cout<< e._t[0] << std::endl << end - start << std::endl;
  39. std::cin.get();
  40. return 0;
  41. }

output
Citar
32234
0
En línea

prometheus48

Desconectado Desconectado

Mensajes: 176


Making a Distro...


Ver Perfil
Re: Código más eficiente
« Respuesta #13 en: 3 Enero 2012, 20:29 pm »

Lo más simple que he podido:
Código
  1. #include <iostream>
  2. int main()
  3. {int a,b,c;
  4. std::cout<<"Escribe 3 numeros";
  5. std::cin>>a>>b>>c;
  6. int n=(a>b)?(a>c)?a:c:(b>c)?b:c;
  7. std::cout<<"El numero mas grande es"<<n;return 0;}
En línea

"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free
Unbr0ken

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Código más eficiente
« Respuesta #14 en: 3 Enero 2012, 22:40 pm »

Lo más simple que he podido:
Código
  1. #include <iostream>
  2. int main()
  3. {int a,b,c;
  4. std::cout<<"Escribe 3 numeros";
  5. std::cin>>a>>b>>c;
  6. int n=(a>b)?(a>c)?a:c:(b>c)?b:c;
  7. std::cout<<"El numero mas grande es"<<n;return 0;}

No porque tu código no posea indentación es más eficiente, tampoco porque no declares el nombre de espacios "std" y lo uses en cada llamada a una de sus funciones internas ganará eficiencia.

Salud.
En línea

Cita de: Snowcrash
Discutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.
prometheus48

Desconectado Desconectado

Mensajes: 176


Making a Distro...


Ver Perfil
Re: Código más eficiente
« Respuesta #15 en: 3 Enero 2012, 22:49 pm »

Ya,

Lo se, esta vez lo que quise era hacerlo lo mas simple posible, vamos sigo el principio KISS

Salud a ti tambien.
Y Salu2 a todos!
En línea

"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Código más eficiente
« Respuesta #16 en: 4 Enero 2012, 01:28 am »

mi version: :D

Código
  1.  
  2. int main()
  3. {
  4. int vals[] = {0x1456,0x1120,0x2480,0x2345,0x121,0x1900,0x967,0x1356};
  5. __asm
  6. {
  7. mov ecx,0x8;
  8. xor esi,esi
  9. xor eax,eax
  10. l: mov edx,vals[esi]
  11. cmp edx,eax
  12. jl m
  13. mov eax,edx
  14. m: add esi,0x04
  15. loop l
  16.  
  17. }
  18. return 0;
  19. }
  20.  
  21.  

output eax: 0x2480 :D




En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Código más eficiente
« Respuesta #17 en: 4 Enero 2012, 01:35 am »

aver si alguien se anima a publicar un reto :3
como antes...
En línea

ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Código más eficiente
« Respuesta #18 en: 4 Enero 2012, 06:06 am »

aver si alguien se anima a publicar un reto :3

See.. se aprenden varias cosas al "diseccionar" un problema como se hizo en este hilo.  ;D

Saludos
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines