Задачи с плавающей точкой в ​​C и Matlab - PullRequest
0 голосов
/ 17 мая 2011

Привет, У меня есть проблемы с плавающей запятой в моем файле matlab-mex, где я получаю значения с величиной от 10 ^ (- 12) до 10 ^ (- 13) ... Есть ли «грязный» способ их решения, чтобы хотя бы установить эти значения в ноль после вычисления, если они такие маленькие? Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Если это массив, вы можете сделать что-то вроде:

small_inds = find(abs(array) < 10^-12);
array(small_inds) = zeros(length(small_inds),1);

(отредактировано для добавления abs() для ясности - спасибо nimrodm)

1 голос
/ 17 мая 2011

Не уверен, что это то, что вы ищете (я думаю, вопрос в том, хотите ли вы, чтобы это было сделано в mex-файле, или нет), но мой трюк в том, чтобы запустить логические операции.Скажем, загруженная мекс-матрица X

Xm = abs(X) > max_error;
X = Xm .* X;
...