Проверка отмены вычитания (точность с плавающей точкой)
Когда вы читаете о численных методах, то отмена вычитания часто является темой.
Простой пример отмены:
a = 1;
b = 1e-16;
a-(a+b) = 0
следовательно, мы теряем всю информацию о б.
Тем не менее, я редко читаю о том, как проверить эту проблему. Разве мы не можем использовать простую функцию для вычитания числа, которая также предупреждает нас о проблемах? Пример:
function c = subtract(a,b)
c = a-b;
if abs(c) < 1e-14*a
disp('Warning: Low precision on subtraction');
end
end
Вероятно, есть некоторые недостатки этой простой функции - это была только моя первая идея. Во всяком случае, что-то вроде этой работы? И почему это не сделано? (т.е. я никогда раньше не видел / не слышал о таких проверках).