Estou trabalhando em um pequeno projeto pessoal (visando uma hélice Parallax, mas isso deve ser bastante generalizável) que precisa de matemática de ponto flutuante.
O microcontrolador com o qual estou trabalhando não possui ponto flutuante nativo ou uma biblioteca de ponto flutuante padrão.
Existem bons recursos ou tutoriais para implementar a matemática de ponto flutuante do software? De preferência com recursos realmente limitados (eu nem tenho uma pilha!).
Eu gostaria de apoiar double
carros alegóricos de tamanho. A hélice é um MCU de 32 bits, então terei que usar várias variáveis para cada flutuador.
Eu sei que existe uma biblioteca de ponto flutuante de software para a hélice, mas ela suporta apenas single
flutuadores de tamanho.
Não, provavelmente não preciso double
de carros alegóricos de tamanho, mas isso soa como um projeto realmente interessante. Metade da razão pela qual quero fazer isso é porque aprenderei muito ao longo do caminho.
fonte
Respostas:
Se você quiser fazer isso sozinho, eu diria apenas faça.
Eu acho que você não encontrará muitos recursos ou tutoriais, porque não há muito.
Aqui está um esboço:
somando / subtraindo:
se expoentes diferem muito (mais do que a mantissa possui bits):
basta retornar o valor com expoente maior (se esse for o subtraendo: negate)
se expoentes são semelhantes:
mude a mantissa de menor valor pela diferença de expoentes e adicione / subtraia de outra mantissa (usando aritmética de ponto fixo)
se o resultado não for 0: mude a mantissa até MSBit do resultado ser 1 e diminua o expoente a mesma quantidade
multiplicação / divisão:
multiplique / divida mantissas (usando aritmética de ponto fixo) e adicione / subtraia expoentes
fonte
Você deve poder usar esta biblioteca de ponto flutuante de precisão múltipla no Propeller, com Catalina C ou gcc. No entanto, pode ser muito lento para muitos aplicativos.
fonte
Parece que esta questão assumiu a tendência de buscar entender mais do que resolver o problema, portanto essa pode não ser a resposta mais útil, mas apenas por uma questão de integridade.
http://code.google.com/p/propgcc/wiki/PropGccCompileOptions
Implica que a versão de hélice do GCC possui suporte de ponto flutuante, incluindo dobras.
É claro que o GCC e suas bibliotecas de compiladores são de código aberto, embora possa haver uma curva de aprendizado real antes que você possa começar a ver o que o código está fazendo.
fonte