Verdade ou Mentira? - Multiplicar é melhor que dividir?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por gabrielsch em Dom 25 Nov 2012, 00:17

Olá pessoal!
Venho hoje com uma pergunta que muitos respondem que é verdade e outros respondem que é mentira, a pergunta é no Game Maker é melhor multiplicar ou dividir?
Vejo muitas pessoas da GMC dizerem que o Game Maker tem mais facilidade em multiplicar números do que dividi-los, isso se aplica geralmente aos eventos Step e Draw, dizem que o desempenho e rapidez em multiplicar é melhor, por exemplo:

Utilizo o seguinte código para fazer uma câmera suave:
Código:
if global.camera_hangle_fk < global.camera_hangle
{global.camera_hangle_fk += max(0,(global.camera_hangle-global.camera_hangle_fk)/2)}

if global.camera_hangle_fk > global.camera_hangle
{global.camera_hangle_fk -= max(0,(global.camera_hangle_fk-global.camera_hangle)/2)}

if global.camera_vangle_fk < global.camera_vangle
{global.camera_vangle_fk += max(0,(global.camera_vangle-global.camera_vangle_fk)/2)}

if global.camera_vangle_fk > global.camera_vangle
{global.camera_vangle_fk -= max(0,(global.camera_vangle_fk-global.camera_vangle)/2)}

Nesse caso eu divido o resultado por 2 para ter uma câmera suave, mas dizem que é melhor fazer desse jeito:

Código:
if global.camera_hangle_fk < global.camera_hangle
{global.camera_hangle_fk += max(0,(global.camera_hangle-global.camera_hangle_fk)*0.5)}

if global.camera_hangle_fk > global.camera_hangle
{global.camera_hangle_fk -= max(0,(global.camera_hangle_fk-global.camera_hangle)*0.5)}

if global.camera_vangle_fk < global.camera_vangle
{global.camera_vangle_fk += max(0,(global.camera_vangle-global.camera_vangle_fk)*0.5)}

if global.camera_vangle_fk > global.camera_vangle
{global.camera_vangle_fk -= max(0,(global.camera_vangle_fk-global.camera_vangle)*0.5)}

Fazer a multiplicação por 0.5 que da o mesmo resultado, então é verdade ou mentira?

-

Acho que a longo prazo dividir muita coisa nesses eventos pode causar lentidão no jogo mesmo.

Flw! sorrindo2

___________


Acesse: http://foxen.com.br/



gabrielsch

Ranking : Nota A
Número de Mensagens : 1229
Idade : 21
Data de inscrição : 06/12/2009
Notas recebidas : D + A + A
Reputação : 28
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por Super Maker em Dom 25 Nov 2012, 01:41

Ambos são porcessados com o mesmo tempo, sendo que existem programadores que não ligam se as variáveis irão ter ou não um controle de fluxo pra valores absurdamente altos. E não padronizam um limite a elas.
Isso pode torna a aplicação lenta.

Da até pra brincar com esses dois operadores pra ter total certesa.
Fiquei pensando agora em fazer dois personagens maratonistas, que correm na mesma direção, mas com sistemas diferêntes pra tal função.
E quando encostassem na faixa de chegada parasse a contagem.
O que acha do tira teima?

Super Maker

Número de Mensagens : 646
Idade : 32
Data de inscrição : 09/07/2011
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por PedroX em Dom 25 Nov 2012, 11:28

Já fiz testes (efetuar as operações milhares de vezes seguidas, várias vezes para garantir) e a multiplicação é mais rápida. Não é diferente dos humanos. Numa divisão temos que achar os restos, depois dividir os restos, e assim vai.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por Super Maker em Dom 25 Nov 2012, 15:46

Depende do processador.
Existem processadores que são capazes de resolver operações matematicas em apenas um ciclo. Independente da operação.


Última edição por Super Maker em Dom 25 Nov 2012, 15:47, editado 1 vez(es)

Super Maker

Número de Mensagens : 646
Idade : 32
Data de inscrição : 09/07/2011
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por Kapoty em Dom 25 Nov 2012, 15:46

Fiz igual ao PedroX, fiz 40.000.000 de operações usando divisão e 40.000.000 de operações usando multiplicação, e o resultado foi que a multiplicação resolve os cálculos mais rapidamente do que a divisão.

Bem, não foi lá aquelas diferenças enormes, mas que foi mais rápido foi.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por Kabeção em Qua 28 Nov 2012, 11:33

No GMS 1.1 para Windows 50.000.000 operações com 10/2 é 100 milésimos mais rápido que 10*0.5.
Todos as operações que fiz dividir é mais rápido que multiplicar. Com 5.000.000 operações é sempre menos que 30 milésimos de diferença e o loop não dura nem 800 milésimos para fazer a operação em um Intel Core 2 Duo já velho...

Provou que é o contrário.

Meu teste:
Código:
time = current_time;
repeat (5000000) {
    s = 10*0.5;
}
mult_time = current_time-time;

time = current_time;
repeat (5000000) {
    s = 10/2;
}
div_time = current_time-time;

show_message('Multiplicação: '+string(mult_time)+'#Divisão: '+string(div_time)+'#Diferença mult-div: '+string(mult_time-div_time));

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por theguitarmester em Qua 28 Nov 2012, 14:00

Fiz os Testes de Kabeção(coloquei no key Space o botão de reiniciar para não ter de fechar e abrir o jogo sempre), e No Princípio Realmente Confirmou que Multiplicação é mais rápido que divisão.
Mas depois de Um Tempo(agora a pouco) sem mecher nele, Voltei a Fazer os Testes, e deu o Contrário, o Mais Rápido foi a Divisão, e continuando a fazer os testes, as vezes Dividir mais rápido outras vezes Multiplicar.

Então concluo sem certeza que o que importa para um ser mais rápido que o Outro, não é somente os Códigos, importa tambem Que outros processos Acontecem No Computador.

Então: Multiplicar é melhor que dividir? MITO

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 20
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por PedroX em Qua 28 Nov 2012, 17:47

Depende das cirscunstâncias. Se o Kabeção invertesse a ordem no código, talvez a multiplicação seria mais rápida. Existem várias situações diferentes em que um pode ser mais rápido que o outro. Só nesse tópico citaram mais de 3. Com um teste aprimorado, poderemos definir se é um mito ou não.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por GameMakerTutoriais em Qua 28 Nov 2012, 20:44


Amigo, se o Game Maker é mais lento pra dividir do que multiplicar, eu realmente não sei dizer, mas a meu ver isso não faz sentido, já que, de uma forma ou de outra, o código tem que ser "convertido" pra linguagem de máquina, independentemente de quantas conversões sejam feitas até acontecer a operação. É uma opinião pessoal, então, não leve muito em consideração, pois nunca pesquisei sobre isso...

Mas em qualquer linguagem, um operador de alternância lógica faz esse tipo de trabalho usando qualquer número múltiplo de 2 mais rápido que um operador aritmético (porque é uma operação muito mais simples). Por exemplo (onde a var "numero" guarda um valor inteiro):

Código:
numero = numero >> 1 // mover um bit à direita equivale a dividir por 2
numero = numero << 1 // mover um bit à esquerda equivale a multiplicar por 2

Se o valor do operador fosse 2, a variável "numero" seria dividida (ou multiplicada) por 4. Se fosse 3, por 8 e assim por diante, pois cada posição de um bit, incrementa a potência de 2. Dentro de um loop alto, esse operador de alternância lógica é uma maneira a mais de ganhar velocidade.

Mas otimização de código nem sempre significa usar esse tipo de "artifício". Montar a seqüência de comandos de forma mais eficaz também é só mais uma delas... Um outro adendo é que esse tipo de teste num pc "normal", onde o trabalho do processador é dividido pra tudo, também vai sofrer influência dos outros processos que tão "rodando" junto do teu game. Então, a cada vez que testar, obviamente vai ter um resultado diferente.

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Verdade ou Mentira? - Multiplicar é melhor que dividir?

Mensagem por Conteúdo patrocinado Hoje à(s) 22:37


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum