A vida no fim dos anos 90, por mais que a minha memória não me deixe lembrar muito bem, parece ter sido, no mínimo, muito interessante. Passavam os anos e a tecnologia estava cada vez mais presente na vida das pessoas. Enquanto as crianças divertiam-se por horas em fliperamas ou em casa jogando videogames, tentando encontrar o nível secreto de Pac-Man ou a saída da Floresta da Ilusão, os adultos assistiam o Fantástico e assustavam-se com um problema na forma com que os computadores armazenavam as datas do calendário, o chamado “bug do milênio”.

O novo milênio chegou, o mundo nem acabou e as coisas mudaram mais do que podíamos imaginar ― e eu nem estou falando dos jogos de realidade virtual ou algo assim. Infelizmente, como aquela pedrinha que não sai do sapato, um problema semelhante está por vir daqui a alguns anos, o “problema do ano 2038”.

O mais interessante de tudo isso é que os jovens dos arcades dos anos 90 já sabem exatamente o porquê desse novo problema acontecer (e o melhor, eles adoravam quando isso acontecia!). Se você quer saber como, é hora de entender mais sobre esses duas facetas da sociedade contemporânea e ver como a matemática é capaz de explicar esses fenômenos pós-modernos.

O bug que tinha hora marcada

Esse é o momento do texto que este redator que vos fala deixa os mais novos chocados: memória de computador já foi cara, muito cara! Nada chegava perto dos gigabytes que temos em qualquer notebook ou celular atualmente e, mesmo assim, já era necessário não ter muita dó do seu dinheiro. Era tarefa, então, dos cientistas da computação darem um jeito de armazenar mais informações em menos espaço.

O problema é que, na Computação, todos os dados e valores, em última instância, podem ser representado apenas por números binários, ou seja, aqueles cujos algarismos são apenas 0 ou 1, que chamamos de bits. Para exemplificar: se dois computadores estivessem brincando de esconde-esconde, o que estivesse batendo cara, provavelmente, estaria contando “0, 1, 10, 11, 100, 101, 110, 111…” ou algo assim. Isso acontece porque esses dois algarismos são capazes de representar estados de energia de forma simples ― 0 geralmente representa uma corrente elétrica baixa, e 1, uma corrente alta, por exemplo. Para piorar, na maioria das vezes, um mesmo número tem mais algarismos na representação binária do que na decimal (é só ver que contamos apenas até 7 na brincadeira agora pouco).

Assim, quanto menos bits usamos para representar algo, o custo para criar circuitos que possam armazená-lo é menor. Seguindo essa linha econômica de pensamento, os cientistas da computação do milênio passado utilizavam apenas os dois últimos dígitos decimais para representar o ano do calendário. “Já que não existiam computadores em 1800, não vai ter problema se nós ignorarmos o ‘19’ do ano que a gente tá, né?”, eles devem ter pensado. O problema apareceu quando eles viram o ano 2000 chegando; afinal, “00” representa o ano 1900 ou o ano 2000? Sem ao menos chegar em 88 milhas por hora, praticamente todos os PCs do mundo saíriam do ano de 1999 e voltaríam a 1900 quando chegasse o Reveillon.

Essa grande pergunta, que deu origem ao tal bug do milênio, foi o que assustou tantas pessoas pelo mundo. Claro que o computador pessoal de alguém não iria explodir com essa confusão de datas, mas imagine o que isso poderia causar em um sistema bancário, por exemplo. Os juros aplicados para o próximo mês seriam negativos, os boletos do mês que vem estariam já atrasados em 100 anos… Felizmente (ou infelizmente, pra quem gosta de ver o circo pegar fogo), as empresas de tecnologia correram como loucas para corrigir esses sistemas mais importantes antes do novo ano chegar.

No fundo, computadores também são miçangueiros… Fonte da imagem: Weirdity

O rei do fliperama

Sabe qual é a diferença entre um videogame e um cubo mágico? É que, do videogame, a galera nunca desistiu de sempre conseguir as melhores pontuações. Pessoas passavam horas tentando uma pontuação perfeita em uma daquelas máquinas de arcade, conseguir milhões de pontos com apenas uma ficha ou moedinha. Até que um dia, uma espécime rara de Homo sapiens jogou tanto uma mesma partida que, em um daqueles momentos inesperados da vida, todos os seus pontos sumiram. Vários zeros, um do lado do outro, estavam no lugar dos seus bilhões de pontos. Aquilo era incrível, nunca tinha acontecido, e, portanto, aquela pessoa deve ter conseguido muita moral com os amiguinhos. E, claro, foi assim que “zerar um jogo” tornou-se o termo usado para designar quando alguém tivesse completado tudo que fosse possível em um game.

Mas, afinal, como isso era possível? A matemática disso nem faz sentido! Se Joãozinho tivesse 99 milhões de maçãs e ganhasse mais uma, o único jeito dele ficar com zero maçãs seria se ele derrubasse todas por uma ladeira… Aqui entra um segundo problema da Computação: enquanto nossos amigos matemáticos podem se contentar com um mundo infinito de números, ou seja, um mundo contínuo, nós da computação temos que nos contentar com um mundo discreto. Tudo é enumerável e tem um limite, mesmo que ele seja estonteantemente grande.

São muitas coisas que podem ser usadas para guardar valores em um computador, mas vamos contentar com um dos mais simples, o registrador. Vários deles estão presentes nessa máquina que você está usando para ler esse texto e, por serem rápidas para se acessar, ficam fisicamente bem perto do processador. E, claro, existe um número máximo de bits que ele pode armazenar ao mesmo tempo. Se considerarmos que ele pode armazenar até 8 bits (também conhecido como 1 byte!), o número máximo que pode ser guardado ali é algo em volta de 2^8 = 256.

Agora, voltando ao contexto do fliperama, vamos imaginar que um registrador de 8 bits, como acabamos de ver, era o responsável por guardar a pontuação de um jogador. Obviamente, quando o jogo tinha acabado de começar, o registrador guardava o número 0 (ou, como costumamos representar em binário, 00000000). O jogador faz algo e ganha 10 pontos! Agora, a pontuação dele deve ser 10, ou, em binário, 00001010. Como ele é realmente bom, ele continua ganhando pontos até chegar à exata marca de 255 pontos, ou 11111111 pontos.

Neste momento, se você é um verdadeiro deviante, já deve estar tentando entender como é possível somar dois números em binário. A verdade é que aquele jeitinho de fazer soma que aprendemos no primeiro ano da escola funciona aqui também! A diferença é que você só tem dois algarismos e, toda vez que você encontrar 1 + 1 = 2 (ou, no caso, 10), você tem que deixar o 0 e fazer o conhecido “sobe um”/”vai um”. Pegue um papel aí e tente ver o que aconteceria caso o nosso jogador ganhasse mais um único ponto.

Como num passo de matemágica… Fonte da imagem: Apple

Se você realmente tentou (ou só viu aqui em cima), você viu que o “sobe um” aconteceu em todos os bits que você tentou somar, até que, finalmente, o 1 que sobrou ocupou um espaço à esquerda do número, como o nono dígito. Entretanto… lembra que o mundo da computação é discreto e nosso registrador só consegue guardar 8 bits? A verdade é que esse último dígito não vai ser armazenado e, simplesmente, o sinal elétrico que o representa vai se perder ao fim da operação. E aí, o que sobrou no registrador então? Exatamente, o valor que ele indica agora é 00000000, ou seja, 0 pontos! Você zerou o jogo!

Legal, né? Ou seja, zerar a sua pontuação não significa que você voltou ao começo, mas que você conseguiu ir tão longe que a capacidade de armazenamento de pontos não deu mais conta! Agora, já podemos responder a seguinte pergunta: como os arcades nos ensinam a entender, então, o “novo bug do milênio”?

O problema que aparece 10 vezes

Depois que o bug do milênio aconteceu, a tecnologia conseguiu se aperfeiçoar e melhorar bastante, tornando mais barato o armazenamento de grandes quantias de dados (pra época, claro, já que hoje ainda achamos pouco até a memória interna do celular…). Isso, claro, também levou a novas formas de representação de dados, incluindo as datas e as horas.

Uma das mais famosas e comuns formas atuais de representar o tempo no computador é a usada pelo POSIX, utilizada por uma série de sistemas operacionais atuais baseados no Unix. Para contar o tempo, ela faz a simples tarefa de contar todos os segundos a partir de um momento base no tempo, chamado de epoch, definido como a meia-noite do dia 1 de janeiro de 1970. Sim, cada segundo desde esse dia. Ele usa 32 bits para representar esse número de segundos, assim, conseguindo guardar a aparente enorme quantia de 2.147.483.647 segundos.

Entretanto, a diferença entre essa representação binária e a da nossa máquina de arcade é que o bit mais significativo (ou seja, o bit mais à direita) é utilizado para representar o sinal do número (na maioria das vezes, usando o método chamado de complemento de dois). Caso ele seja 1, o número passa a ser negativo! Além disso, eles passam a ser contados ao contrário, assim como as datas antes do tempo comum. Exemplificando, em um mundo de 3 bits: 000 seria 0, 001 seria +1, 010 seria +2 e 011 seria +3. Entretanto, 100 seria -4, 101 seria -3, 110 seria -2 e 111 seria -1. É mais intuitivo e genial do que parece da primeira vez que você olha!

Fica a dica: para achar o complemento de dois de um número binário, inverta todos os bits ― ou seja, troque todos os 0 por 1, e vice-versa ― e some 1 ao resultado.

Já que estamos falando de tempo, por que não um relógio? Fonte da imagem: BogoToBogo

O problema é que, mais uma vez, estamos em um mundo discreto e, bom, se passarem todos esses segundos, os armazenamentos usados para guardar essa data vão chegar ao seu limite máximo; ou seja, assim como a máquina de arcade, todos os seus bits terão o valor 1. Especificamente, isso vai acontecer no dia 19 de janeiro de 2038, às 03:14:07 UTC. A partir daí, caso mais um segundo passe e tenha que ser adicionado à conta… Ao invés de “zerar o tempo”, o número de segundos passa a ser negativo, fazendo o tempo voltar a dezembro de 1901!

Quem disse que não dá pra viajar no tempo? Fonte da imagem: Wikipédia

O que faz um jogo de fliperama poder ser zerado é a mesma coisa que pode bagunçar com vários sistemas operacionais daqui alguns anos… Quem diria! Viu como o mundo discreto dos números binários é legal?

E agora? É O FIM DO MUNDO?

Calma, calma… A situação é bem menos desesperadora do que nos anos 2000. A verdade é que o problema foi encontrado com muitos anos de antecedência, dando um grande tempo aos desenvolvedores e engenheiros a buscarem novas soluções engenhosas para resolver o “problema do ano 2038”. Além disso, a evolução computacional hoje é bem mais rápida e, em breve, até mesmo alguns sistemas embarcados, como os encontrados em pequenos dispositivos, que geralmente armazenam essas informações com 8 ou 16 bits, terão soluções para não voltarmos no tempo inconscientemente.

Mas, da próxima vez que você estiver tentando “zerar” uma máquina de fliperama (ou mesmo um joguinho no seu celular), lembre-se: o recurso matemático que você está usando pode ser o mesmo que vai fazer o seu boleto da conta de luz, no futuro, ficar atrasado, tipo, uns 50 anos…


Gabriel Toschi Cientista da computação em formação pela USP, sempre encontra tempo para falar sobre jogos, tecnologia, viagens no tempo e outras loucuras. Desenvolve jogos, aprecia chocotones, escreve para o PlayReplay e para o Deviante e faz piadas ruins em seu Twitter.