我需要编写一个用于遗留应用程序的定点处理器。需要新功能,这些功能需要较大的动态范围,即使在缩放后也很可能超出固定点范围。由于处理器不会因为几个原因而改变,我计划采用基于定点算法的浮点运算 - 基本上是基于软件的方法。我想定义一些数据结构来表示底层定点处理器的C中的浮点数。有可能吗?我打算使用IEEE floating point representation。什么样的数据结构有利于实现乘法,除法,加法和子等基本操作。 C / C ++中是否已经有一些开源库?
答案 0 :(得分:1)
大多数没有本机浮点支持的微控制器C开发工具都为浮点运算提供了软件库。即使您在汇编程序中进行编程,也可以使用这些库。 (只是好奇,你使用哪个处理器和哪些开发工具?)
但是,如果您认真编写自己的浮点库,最有效的方法是将例程视为对整数进行操作的例程。您可以使用联合或类似跟随的代码在浮点和整数表示之间进行转换。
uint32_t integer_representation = *(uint32_t *)&fvalue;
请注意,这本质上是未定义的行为,因为C标准中未指定浮点数的格式。
如果你坚持使用匹配的浮点和整数类型(通常是32位或64位类型),问题会容易得多,这样你可以将例程视为普通的整数例程,因为,例如, addition 采用浮点值的两个32位整数表示形式,并返回结果的32位整数表示。
另外,如果你自己使用这些例程,你可能会离开标准未实现的部分,例如异常标志,次正规数,NaN和Inf等。
答案 1 :(得分:0)
您实际上并不需要任何数据结构来执行此操作。您只需使用整数来表示浮点编码和整数来表示解压缩的符号,指数和有效数字段。