Я работаю над небольшим личным проектом (нацеленным на Parallax Propeller, но это должно быть довольно обобщенно), который требует математики с плавающей запятой.
Микроконтроллер, с которым я работаю, не имеет встроенной плавающей запятой или стандартной библиотеки с плавающей запятой.
Существуют ли хорошие ресурсы или учебные пособия по реализации математических программ с плавающей запятой? Желательно на действительно ограниченных ресурсах (у меня даже нет стека!).
Я хотел бы поддержать double
размерные поплавки. Пропеллер представляет собой 32-битный MCU, поэтому мне придется использовать несколько переменных для каждого числа с плавающей запятой.
Я знаю, что существует одна программная библиотека с плавающей точкой для пропеллера, но она поддерживает только single
размерные числа с плавающей запятой.
Нет, мне, наверное, не нужны double
поплавки, но это звучит как очень интересный проект. Половина причины, по которой я хочу это сделать, заключается в том, что я многому научусь по пути.
источник
Ответы:
Если вы хотите сделать это самостоятельно, я бы сказал, просто сделай это.
Я думаю, вы не найдете слишком много ресурсов или учебника, потому что там не так много.
Вот схема:
добавление / вычитание:
если показатели отличаются слишком сильно (больше, чем у мантиссы биты):
просто верните значение с большим показателем (если это вычитаемое значение: отрицание)
если показатели одинаковы:
сдвиньте мантиссу меньшего значения на разность показателей и прибавьте / вычтите из другой мантиссы (используя арифметику с фиксированной запятой),
если результат не равен 0: сдвиньте мантиссу до MSBit результата, равного 1, и уменьшите показатель степени на ту же величину
умножение / деление:
умножение / деление мантисс (с использованием арифметики с фиксированной точкой) и сложение / вычитание показателей
источник
Вы должны быть в состоянии использовать эту библиотеку с плавающей точкой с множественной точностью на Propeller с Catalina C или gcc. Однако это может быть слишком медленно для многих приложений.
источник
Похоже, что этот вопрос взял на себя склонность к поиску понимания больше, чем к решению проблемы, так что это может быть не самый полезный ответ, но только ради полноты
http://code.google.com/p/propgcc/wiki/PropGccCompileOptions
Подразумевает, что версия GCC с пропеллером имеет поддержку с плавающей запятой, в том числе удваивается.
GCC и его библиотеки компиляторов, конечно, с открытым исходным кодом, хотя может возникнуть реальная кривая обучения, прежде чем вы сможете увидеть, что делает код.
источник