Pau*_*ing -1 c floating-point gcc
我有一组非常长的方程式,我最初编写的目标是MATLAB.现在,我必须将它移植到我的控制器的嵌入式C.
写入时的C和C++默认行为double a = 1/3;是返回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));
Run Code Online (Sandbox Code Playgroud)
我的目标是ARM计算机,所以我使用的是Linaro GCC.
编辑:
事实证明,改变海湾合作委员会的行为是一个巨大的禁忌.由于@Matteo Italia,使用正则表达式解决了这个问题.结束编写一个基于Qt的小解决方案,将^替换为幂符号,并在.0文字数字中添加尾随,可在此处获取:https:
//github.com/pauloasherring/MATEquationToC
如果您要使用它,请自行承担风险:)
不.这是基本语法,不能更改.
即使有可能,我会不惜一切代价避免它,因为你的C项目不再是实际的C,而是一些奇怪的方言,在数字文字的语义上有很大的不同; 重用项目中的代码,从另一个代码导入代码,或者让其他人在您的项目上工作将是正确的危险.
FWIW,缺少的点可以通过一个简单的正则表达式添加,如:
搜索: ([^.]|^)\b([0-9]+)\b([^.]|$)
更换: $1$2.0$3
(完成没有lookbehind/lookahead以获得最大的可移植性)