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

Esqueci-me da senha

Últimos assuntos
» Problema ao entrar por uma porta e voltar por ela
por aminaro Ontem à(s) 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21


0.1 + 0.2 == 0.3 = False???

4 participantes

Ir para baixo

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

Mensagem por Ralphed Sáb 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 : 461
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
  • Godot
  • Outros


TRFN gosta desta mensagem

Ir para o topo Ir para baixo

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

Mensagem por NPH Sáb 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 : 58
Número de Mensagens : 504
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


TRFN gosta desta mensagem

Ir para o topo Ir para 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);
TRFN
TRFN

Games Ranking : Nota C

Notas recebidas : C + C + C
Data de inscrição : 16/01/2012
Reputação : 70
Número de Mensagens : 1192
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 :
  • Web Tecnology
  • Javascript
  • Outros


https://site13.com.br/

Ir para o topo Ir para 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 B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
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

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para 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 : 461
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
  • Godot
  • Outros


Ir para o topo Ir para 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


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos