Código más eficiente

Iniciado por prometheus48, 1 Enero 2012, 15:59 PM

0 Miembros y 1 Visitante están viendo este tema.

rir3760

Cita de: BlackZeroX (Astaroth) en  1 Enero 2012, 22:25 PM
Tambien puedes suplantar max(a, max(b, c)) por:



((a>((b>c)?b:c))?a:((b>c)?b:c))
///o tambien por (Son identicos solo quite los parentesis cosa NO recomendada!¡):
a>b>c?b:c?a:b>c?b:c


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

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

Un saludo
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

Cita de: rir3760 en  2 Enero 2012, 01:33 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!¡.
The Dark Shadow is my passion.

tig0

ahi va el mio para sacar el maximo de 8 numeros de 16 bits
Código (cpp) [Seleccionar]
#include <iostream>
#include <ctime>

typedef __declspec(align(8)) struct
{
short _t[4];
}sal;

int main()
{

sal k, j, e;
k._t[0] = 2;
k._t[1] = 2342;
k._t[2] = 5712;
k._t[3] = 32234;
j._t[0] = 30353;
j._t[1] = 2762;
j._t[2] = 23484;
j._t[3] = 9853;
clock_t start = clock();

__asm {
movq mm0, k
movq mm1, j
pmaxsw mm1, mm0
pshufw mm0, mm1, 0x4e
pmaxsw mm1, mm0
pshufw mm0, mm1, 0x11
pmaxsw mm1, mm0
pshufw mm0, mm1, 0x11
pmaxsw mm1, mm0
movq e, mm0
}
clock_t end = clock();
short x = 0;

std::cout<< e._t[0] << std::endl << end - start << std::endl;
std::cin.get();
return 0;
}


output
Citar32234
0

prometheus48

Lo más simple que he podido:
Código (cpp) [Seleccionar]

#include <iostream>
int main()
{int a,b,c;
std::cout<<"Escribe 3 numeros";
std::cin>>a>>b>>c;
int n=(a>b)?(a>c)?a:c:(b>c)?b:c;
std::cout<<"El numero mas grande es"<<n;return 0;}
"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

Cita de: prometheus48 en  3 Enero 2012, 20:29 PM
Lo más simple que he podido:
Código (cpp) [Seleccionar]

#include <iostream>
int main()
{int a,b,c;
std::cout<<"Escribe 3 numeros";
std::cin>>a>>b>>c;
int n=(a>b)?(a>c)?a:c:(b>c)?b:c;
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.
Cita de: SnowcrashDiscutir 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

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!
"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

mi version: :D

Código (cpp) [Seleccionar]


int main()
{
int vals[] = {0x1456,0x1120,0x2480,0x2345,0x121,0x1900,0x967,0x1356};
__asm
{
mov ecx,0x8;
xor esi,esi
xor eax,eax
l: mov edx,vals[esi]
cmp edx,eax
jl m
mov eax,edx
m: add esi,0x04
loop l

}
return 0;
}



output eax: 0x2480 :D





x64core

aver si alguien se anima a publicar un reto :3
como antes...

ace332

Cita de: RHL - 该0在 en  4 Enero 2012, 01:35 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