Принудительно ли использовать MATLAB для предопределения по умолчанию?
Есть ли способ заставить MATLAB использовать single
прецизионность в качестве предоплаты по умолчанию?
У меня есть код MATLAB, вывод которого мне нужно сравнить с выводом кода C, а код C написан исключительно с использованием floats
нет doubles
позволил.
2 ответа
Краткий ответ: вы не можете.
Более длинный ответ: в большинстве случаев вы можете обойти это, установив исходные переменные в одиночные. Как только это будет сделано, этот тип будет (почти всегда) распространяться вниз по вашему коду. (см. эту и эту ветку на MathWorks).
Так, например, если вы делаете что-то вроде:
>> x = single(magic(4));
>> y = double(6);
>> x * y
ans =
4×4 single matrix
96 12 18 78
30 66 60 48
54 42 36 72
24 84 90 6
MATLAB держит ответ в более низкой точности. Я иногда сталкивался с функциями, как встроенными, так и из FileExchange, которые преобразовывали выходные данные в двойные, так что вы захотите посыпать случайные assert
заявление, чтобы сохранить честность во время вашей первоначальной отладки (или, что еще лучше, поставить утверждение в качестве первых строк любых подфункций, которые вы пишете для проверки критических входных данных), но это должно помочь вам на 99%.
Вы можете конвертировать любой объект A
с одинарной точностью, используя A=single(A);
Форумы Mathworks показывают, что в вашем случае: system-specific('precision','8');
должен сделать это. Попробуйте это в консоли или добавьте вверху вашего скрипта.