Atualmente, estou aprendendo sobre a construção do compilador e o design de idiomas e estou pensando em quais tipos de dados nativos quero oferecer no meu idioma. Agora, existem muitas línguas que fazem uma distinção entre números inteiros e reais. No entanto, lembro-me de assistir a uma palestra de Douglas Crockford na qual ele disse:
Ter um único tipo de número no sistema significa que você não pode cometer um erro escolhendo o tipo de número errado
Ele também mencionou que recomenda uma representação numérica diferente da IEEE-754 comumente usada (por favor, corrija-me se estiver errado), nomeando o DEC64. Daí a minha pergunta: para uma linguagem de uso geral com foco principalmente educacional, que representação numérica devo usar?
EDIT: Com foco educacional, estou falando do meu próprio progresso em aprender sobre compiladores, não em educar os outros.
fonte
Respostas:
Em geral, temos uma representação numérica diferente porque eles têm pontos fortes e fracos diferentes, seja velocidade, precisão ou alcance. Além disso, esse deve ser o caso, porque não podemos representar todos os números reais com memória finita; sempre temos que escolher alguns que não podemos representar exatamente.
A citação de Doug Crockford que você tem é muito idiota; se você pode escolher apenas uma representação, OK, você não pode escolher a incorreta, mas também não pode escolher a correta. ou seja, sua única opção funcionará para alguns usos, mas não para todos.
É verdade que algumas representações são provavelmente melhores, pois a primeira opção de escolha DEC64 parece razoável aqui. É uma representação em ponto flutuante decimal, portanto, será menos surpreendente que o IEEE-754 (que é ponto flutuante binário) na maioria das situações, pois as pessoas tendem a pensar em decimal, por exemplo, pode representar exatamente 0,3. Ainda haverá problemas de representação em algumas circunstâncias, por exemplo, adicionando números muito grandes e muito pequenos.
para uma leitura mais aprofundada, eu sugeriria a série de artigos de Richard Harris, 'por que X não o corrige?'
fonte
Para uma linguagem geral, os números devem se comportar como os ensinados na aula de matemática. Somente linguagens para fins especiais, como as dos drivers de dispositivo, devem ter matemática especial.
Eu recomendaria o uso de números de precisão arbitrária em vez de números de precisão fixa. Sim, eles são mais lentos, mas se comportam como as pessoas esperam que o número se comporte. A colocação de limites artificiais sobre eles será relatada como um bug.
fonte