DIY FP-在没有硬件FPU的微控制器上实现浮点数学运算


8

我正在做一个小的个人项目(针对Parallax Propeller,但应该可以推广),需要浮点数学运算。

我正在使用的微控制器没有本机浮点或股票浮点库。

是否有关于实施软件浮点数学的良好资源或教程?最好在真正有限的资源上(我什至没有堆栈!)。


我想支持 double大尺寸的花车。螺旋桨是32位MCU,因此我必须为每个浮点使用多个变量。

我知道那里有一个用于螺旋桨的软件浮点库,但它仅支持single大小不定的浮子。

不,我可能真的不需要double大小的浮标,但这听起来像是一个非常有趣的项目。我想这样做的一半原因是,我会在此过程中学到很多东西。


什么编译器?我可能错过了,但看不到您使用的是哪种语言。
Kortuk 2012年

@Kortuk-我个人的目标是视差螺旋桨,因此它可以是Spin或asm。但是,我认为这不应该太特定于语言。假设我有常用的操作(+-/ *移位,按位和/或/等。)。
康纳·沃尔夫

您需要执行哪些操作?如果您只想加,减和乘,而不必担心边缘情况,NaN等,那么实现这一点应该很简单。过去,我已经为8位微控制器完成了这项工作,即使您在asm中全部完成这也不是一项艰巨的任务。
Paul R

1
就像您说的那样,您将在此过程中学到很多有关实现浮点运算的知识。
Paul R

3
也许您不需要浮点数。如果只需要小数,还可以将定点算术与十进制(实际二进制)点向左移动一些位置。您能详细介绍一下您的应用程序吗?
Curd 2012年

Answers:


4

如果您想自己做,我会说就做。

我想您不会找到太多资源或教程,因为所涉及的内容并不多。

这里是一个大纲:

  • 加/减:
    如果指数相差太大(超过尾数位):
    仅返回具有较大指数的值(如果这是减数:取反)

    如果指数相似: 如果结果不为0,则将
    较小值的尾数移动指数差,然后与其他尾数进行加/减(使用定点算法)
    :将尾数上移直到结果的MSBit为1,并将指数减小相同量

  • 乘法/除法:
    尾数相乘/除法(使用定点算法)并相加/相减指数


2

您应该可以使用 在Catpellina C或gcc的Propeller上多精度浮点库。但是,对于许多应用程序来说可能太慢了。


螺旋桨上的C代码可以与Spin或prop-asm互操作吗?如果没有,我可能会翻译它进行旋转。幸运的是,我不需要太多速度。实际上,我需要在2 hz上执行7次操作。
康纳·沃尔夫

2
哦,男孩,仅源文件就有1.1 MB,已压缩。我认为这有点矫kill过正。有没有更简单的选择?
康纳·沃尔夫

2
更重要的是,该库(1)是关于任意精度浮点(不是32位和64位本机大小),并且(2)它针对i386和x64 Intel,AMD和MIPS处理器上的Linux编译器。在源文件夹中提到了“ arm”和“ generic”,但是我不会从这里开始。
凯文·维米尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.