GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Conectar-se

Esqueci minha senha

Últimos assuntos
» como fazer o player atacar e depois voltar para o sprite parado.
por makgamer Sex 09 Abr 2021, 11:00

» Inimigo Seguir o Player e Uma coisa a mais...
por makgamer Sex 09 Abr 2021, 10:11

» Ponto de origem da bala
por Paulomm32 Ter 06 Abr 2021, 10:56

» [Resolvido]Alterar o ponto de origem da bala na sprite.
por Capote Ter 06 Abr 2021, 07:36

» Tiro não sai pelo cano da arma
por Capote Seg 05 Abr 2021, 07:30

» [Curso de GML] Aula 5 - A declaração FOR
por VectorthecrocodileBR Dom 04 Abr 2021, 23:52

» [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH
por VectorthecrocodileBR Dom 04 Abr 2021, 17:18

» Tiro não sai pelo cano da arma
por Paulomm32 Dom 04 Abr 2021, 14:08

» Como faço efeito digitação
por makgamer Sab 03 Abr 2021, 23:36

» [RESOLVIDO]Fazer o personagem virar quando o mouse chega a 90 graus
por Paulomm32 Sab 03 Abr 2021, 13:28

» [RESOLVIDO]Atirar para onde eu aperto
por NPH Sex 02 Abr 2021, 20:36

» resolução do texto
por NPH Sex 02 Abr 2021, 16:45

» Novidade interessante!!! Update do GMS 2
por Mr.Rafael Qui 01 Abr 2021, 16:02

» Gerador de QRCODE Game maker Studio e GM 8
por TRFN Seg 29 Mar 2021, 23:36

» Olá, Me chamo Ausiane!
por TRFN Seg 29 Mar 2021, 23:28

» Como que eu faço para fazer time rewind no gamemaker
por Mr.Rafael Ter 23 Mar 2021, 16:35

» 0.1 + 0.2 == 0.3 = False???
por Ralphed Ter 23 Mar 2021, 11:33

» Esse é seu primeiro contato com programação de jogos?
por Ausiane Seg 22 Mar 2021, 08:34

» Estou encontrando problema no meu dano
por Sagastico Sab 20 Mar 2021, 21:48

» Instancias ID
por NPH Sab 20 Mar 2021, 18:55

» como eu faço um sistema de recorde?
por um cara ai Sab 20 Mar 2021, 15:53

» Como que eu faço para fazer o tempo parar no gamemaker?
por NPH Ter 16 Mar 2021, 21:19

» [Resolvido] Click de inventario
por PaladinoMaluko Sab 13 Mar 2021, 18:29

» Raliza Software - Hyperball
por tito76 Qua 10 Mar 2021, 03:40

» Draw Set Color local
por divin sphere Ter 09 Mar 2021, 20:36


0.1 + 0.2 == 0.3 = False???

Ir em baixo

0.1 + 0.2 == 0.3 = False??? Empty 0.1 + 0.2 == 0.3 = False???

Mensagem por Ralphed Sab 06 Mar 2021, 21:13

Bom, ultimamente estive trabalhando em um joguinho aqui que utiliza networking no GML, e acabei sendo forçado a aprender a manipular os buffers, e isso me fez ter um interesse ainda maior por programação e acabei seguindo alguns canais sobre programação em outras linguagens.

Mas hoje, um canal que curto muito (canal do Fabio Akita) postou hoje sobre algumas coisas tecnicas sobre processadores e como eles trabalham com os dados.

E nesse vídeo ele abordou um assunto que me deixou curioso...

Bom, todos sabemos, que 0,1 + 0,2 é igual a 0,3 certo? Porem se voce tentar programar isso em python, ele vai retornar como FALSE... scratch
Fiquei bem curioso com isso, e resolvi testar no GML, por ser uma engine de jogos acreditei que ele "driblaria" esse erro, mas ele também retorna false. surpreso

Se liguem.
0.1 + 0.2 == 0.3 = False??? 12310

Porem se voce calcular outro valor por exemplo, 0,2 + 0,2 == 0,4, ele retorna como TRUE.
0.1 + 0.2 == 0.3 = False??? 22410

Pode testar ai se você quiser hehe

Código:

///Codigo simples para testes
var check = 0.1 + 0.2 == 0.3;

   if (check)
      _return = "true";
   else
      _return = "false";
   

show_debug_message("0.1 + 0.2 == 0.3 is :"+string(_return));


Fiquei bem surpreso com isso, e ativa um sinal de atenção pra quem trabalha com dados e etc. Esse tipo de verificação faz o sistema verificar se o valor é EXATAMENTE igual 0,3 mas como esse resultado deixa uma "sujeirinha" nos valores flutuantes, coisas assim podem acontecer...

As vezes você pode programar certo, mas o resultado sai errado, agora você sabe o que pode ser. 0.1 + 0.2 == 0.3 = False??? 71423

Bem, achei bem interessante isso, e (caso esteja deslogado) deixei o video em questão como hyperlinks aqui na mensagem. Caso queira ver sobre algo mais.

e é isso ai...
Ralphed
Ralphed

Data de inscrição : 18/08/2010
Reputação : 12
Número de Mensagens : 458
Prêmios : 0.1 + 0.2 == 0.3 = False??? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


Ver perfil do usuário

TRFN gosta desta mensagem

Voltar ao Topo Ir em baixo

0.1 + 0.2 == 0.3 = False??? Empty Re: 0.1 + 0.2 == 0.3 = False???

Mensagem por NPH Sab 06 Mar 2021, 21:31

Por isso que colisões bugam com números quebrados (0.xx), tem partes no manual que fala que algumas funções arredondam para o valor mais próximo...
Agora tudo faz mais sentido, por isso que quando eu tentava programar colisões com WHILE o jogo simplesmente travava, por causa dos números não inteiros o while nunca se resolvia affraid
É bom ver essas coisas e aprender mais.
NPH
NPH

Games Ranking : Nota B

Notas recebidas : B
Data de inscrição : 28/11/2010
Reputação : 39
Número de Mensagens : 483
Prêmios : 0.1 + 0.2 == 0.3 = False??? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


Ver perfil do usuário

TRFN gosta desta mensagem

Voltar ao Topo Ir em baixo

0.1 + 0.2 == 0.3 = False??? Empty Re: 0.1 + 0.2 == 0.3 = False???

Mensagem por TRFN Dom 07 Mar 2021, 11:55

Uma curiosidade e que testando em javascript o mesmo erro acontece. Porem, percebi que se voce utilizar:

Código:
if(0.1+0.2==0.30000000000000004){ show_message("Igual") } else { show_message("Diferente") }

Ira funcionar, exibindo igual. A diferenca e minima como podemos perceber.

Para quem quiser debugar no console do seu navegador, que ira processar JavaScript:

Código:

console.log(0.1+0.2);

_________________

Desenvolvedor PHP, CSS, Javascript e HTML5 blz

Acesse: https://site13.com.br/
Meu Git: https://github.com/TRFN
TRFN
TRFN

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 16/01/2012
Reputação : 60
Número de Mensagens : 1124
Prêmios : 0.1 + 0.2 == 0.3 = False??? Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 2

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Tululoo Game Maker
  • Web Tecnology
  • Javascript
  • Outros


Ver perfil do usuário https://linkedin.com/in/trfn

Voltar ao Topo Ir em baixo

0.1 + 0.2 == 0.3 = False??? Empty Re: 0.1 + 0.2 == 0.3 = False???

Mensagem por PedroX Qua 17 Mar 2021, 21:06

Quanto é 10 / 3 ?
Não conseguimos representar o resultado com um número finito de dígitos. Mas poderíamos aproximá-lo: 3, 3.3, 3.33, 3.333, 3.3333 e assim por diante (depende da precisão desejada), ou, dependendo do critério, até 3.34.
As pessoas costumam usar a base 10 no dia a dia (de 0 a 9 e depois reinicia). Por exemplo, o número 705 é dado por ... + 0*10^3 + 7*10^2 + 0*10 + 5*(10^0) + 0*(10^-1) + ... + 0*(10^-30) + 0*(10^-31) + ...
Obs: "..." significa que foram omitidos alguns (ou infinitos) termos (que valem 0 neste caso) antes ou depois da sequência.
Omitindo-se os termos nulos, percebemos um resultado exato com uma representação finita (ou seja, 3 termos).
Programadores usam vários sistemas, incluindo os sistemas decimal (base 10), hexadecimal (base 16), octal (base 8 ), e principalmente o sistema binário, que é o sistema base do computador.
O computador usar o sistema binário significa que ele precisa representar os números com potências de 2 e não de 10 (como no exemplo que dei acima).
Por exemplo:
8 = ... + 0*(2^4) + 1*(2^3) + 0*(2^2) + ... + 0*(2^-908) + ...
0.25 = ... 0*(2^904) + ... + 1*(2^-4) + 0*(2^-5) + ...
Alguns números não podem ser representados por somas de potências de 2 (com um número finito de termos), assim como 10/3 não pode ser representado por uma soma com um número determinado de termos de potências de 10.
Tente fazer a representação do número 0.2 em binário.
Você vai ver que aparece uma dízima: 0.00110011001100110011...
Concluindo, não é possível representar 0.2 em binário de forma exata. A precisão depende do número de bits que o sistema suporta.
Ao fazer uma operação com um número desse tipo, os resultados são "ligeiramente" arredondados.

Aliás, no exemplo que funciona 0.2+0.2 == 0.4, é como fazermos 10/3 + 10/3 + 10/3 = 10.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota C

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6080
Prêmios : 0.1 + 0.2 == 0.3 = False??? Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ver perfil do usuário https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Voltar ao Topo Ir em baixo

0.1 + 0.2 == 0.3 = False??? Empty Re: 0.1 + 0.2 == 0.3 = False???

Mensagem por Ralphed Ter 23 Mar 2021, 11:33

Sim da pra se imaginar um monte de aplicação errônea graças a essa falha NPH yes
Não sei ao certo TRFN mas acho que algumas linguagens conseguem corrigir isso, acho que C faz isso...

Pedro Pedro... você me fez ter o interesse em estudar melhor conversão binária 0.1 + 0.2 == 0.3 = False??? 71423, vou aprender logo antes que eu me matricule e tenha que aprender a força... geek
Ralphed
Ralphed

Data de inscrição : 18/08/2010
Reputação : 12
Número de Mensagens : 458
Prêmios : 0.1 + 0.2 == 0.3 = False??? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


Ver perfil do usuário

Voltar ao Topo Ir em baixo

0.1 + 0.2 == 0.3 = False??? Empty Re: 0.1 + 0.2 == 0.3 = False???

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo


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