定点处理器中浮点运算的数据结构

data structures for floating point operation in fixed point processor

本文关键字:数据结构 浮点运算 处理器      更新时间:2023-10-16

我需要编写一个用于遗留应用程序的定点处理器。需要新的特性,这些特性需要大的动态范围,即使缩放后也很可能超出定点范围。由于几个原因,处理器不会改变,我计划将基于定点算术的浮点运算结合起来——基本上是基于软件的方法。我想为底层的定点处理器定义几个数据结构来表示C中的浮点数。有可能做到吗?我计划使用IEEE浮点表示。什么样的数据结构有利于实现乘法、除法、加法和减法等基本运算。C/c++中是否已经有一些可用的开源库?

大多数没有原生浮点支持的微控制器C开发工具都提供了用于浮点操作的软件库。即使你用汇编语言编程,你也可以使用这些库。(只是好奇,你用的是哪个处理器和哪个开发工具?)

但是,如果您认真编写自己的浮点库,最有效的方法是将例程视为操作整数的例程。可以使用联合或类似下面的代码在浮点数和整数表示之间进行转换。

uint32_t integer_representation = *(uint32_t *)&fvalue;

注意,这本质上是未定义的行为,因为浮点数的格式在C标准中没有指定。

如果坚持使用匹配的浮点型和整型(通常是32位或64位类型),问题就容易得多,这样您就可以将例程视为普通的整型例程,例如,加法接受浮点值的两个32位整数表示,并返回结果的32位整数表示。

另外,如果你自己使用这些例程,你可能会避开标准中未实现的部分,比如异常标志、亚正常数字、NaN和Inf等。

您实际上不需要任何数据结构来完成此操作。您只需使用整数来表示浮点编码,并使用整数来表示未打包的符号、指数和有效字段。