У меня есть набор очень длинных уравнений, которые я изначально написал для 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));
Моя цель - компьютер ARM, поэтому я использую Linaro GCC.
Редактировать:
Как оказалось, изменение поведения GCC было огромным нет-нет.Решил это с помощью регулярных выражений, благодаря @Matteo Italia.Закончилось написание небольшого решения на основе Qt для замены ^ в качестве степенных символов и добавления конечных .0
к буквальным числам, доступных здесь: https://github.com/pauloasherring/MATEquationToC Если вы хотите его использовать, делайте это на свой страх и риск :)