我有一组非常长的方程,是我最初针对 MATLAB 编写的。现在,我必须将其移植到我的 Controller 的嵌入式 C 语言中。
当写入 double a = 1/3;
时,C 和 C++ 默认行为是返回 0,因为它被解析为整数算术。我想知道是否有办法关闭这种行为,这样我就不需要将 .0 附加到方程中的每个常数。
例如,以下是一个相对较短的内容:
eq = (121.0/16.0*pow(d,4)*pow(r,2)*pow(x,10)+2*pow(r,2)*pow(11.0/6.0,3)*pow(d,4)*pow(x,10) + pow(r,2)*pow(11.0/6.0,6)*pow(d,6)*pow(x,18) + pow(r,2)*pow(d,2)*pow(x,2) - pow(jmax,2));
我的目标是 ARM 计算机,因此我使用 Linaro GCC。
编辑:
事实证明,改变 GCC 的行为是一个巨大的禁忌。
使用正则表达式解决了这个问题,感谢@Matteo Italia。
最终编写了一个基于 Qt 的小型解决方案,用于将 ^ 替换为电源符号,并将尾随 .0
添加到文字数字,可在此处获取:
https://github.com/pauloasherring/MATEquationToC
如果您要使用它,请自行承担风险:)
最佳答案
没有。这是基本语法,无法更改。
即使有可能,我也会不惜一切代价避免它,因为你的 C 项目将不再是真正的 C,而是某种奇怪的方言,在数字文字的语义上有巨大差异;重用您项目中的代码、从另一个项目导入代码或让其他人在您的项目上工作都会造成正确性风险。
FWIW,可以通过一个简单的正则表达式添加缺失的点,例如:
搜索:([^.]|^)\b([0-9]+)\b([^.]|$)
替换:$1$2.0$3
(没有lookbehind/lookahead来实现最大的可移植性)
关于c - GCC 默认整数/浮点算术行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707813/