Принудительно ли использовать 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'); должен сделать это. Попробуйте это в консоли или добавьте вверху вашего скрипта.

Другие вопросы по тегам