Не для всех вещественных чисел можно использовать такой вариант обмена. Пусть, например, имеются два вещественных числа: a=2.3e26, b=2e-10. Тогда при их сложении значение переменной b "потеряется" (станет равным 0) вследствие внутреннего представления в компьютере действительных чисел. При выполнении следующей программы при указанных значениях:

Program Obm1;
Var
   a, b:Real;
Begin
   Write('Задайте два вещественных числа: ');
   ReadLn(a,b);
   WriteLn('Значения переменных до обмена.');
   WriteLn('a=',a,' b=',b);
   {Произведем обмен значений переменных.}
   a:=a+b; {Значение переменной a не изменится!!!}
   b:=a-b; {Значение переменной b станет равным a!!!}
   a:=a-b; {Значение переменной a станет равным 0!!!}
   WriteLn('Значения переменных после обмена.');
   WriteLn('a=',a,' b=',b);
End. 

переменная a станет равной 0.