如何解决C 预处理器浮点运算
假设在一个不包含硬件 FPU 的平台上工作(代码是用 C 语言开发的,带有 GCC 起源的编译器)。在代码中有一个在预处理器级别解析的方程:
uint16_t result1 = (100 * 5) / 4;
uint16_t result2 = 100 * 1.25;
为 result1
和 result2
两种情况生成的程序集是否存在实际差异?目标 MCU 没有硬件 FPU 的事实是否对预处理器计算有任何影响?
澄清:
上面的代码在运行时是否等于:
uint16_t result1 = 125;
uint16_t result2 = 125;
?
解决方法
为两种情况生成的程序集是否有任何实际差异
没有。两种情况都可以在编译时计算。
但是,可能有理由更喜欢第一个。整数运算是 100% 可预测的,而浮点运算则不是。在这种情况下,它不会有什么不同,但在其他情况下会。
以上代码在编译时是否会转换为:
很有可能。然而,没有什么要求这样做。如果您使用没有优化的 gcc
,很可能不会发生这种情况,因为该编译器默认没有启用优化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。