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