В арифметических операциях с плавающей запятой не гарантируется точность результата. Эту неточность вы накапливаете в average.

Ai - не рандом, диапазон ограничен, колебания между несколькими соседями незначительна, значит експонента одинакова, и сложения/вычитания мантис - почти по правилам целых чисел.
Разрядность Ai - далеко не все 24 бита. Накапливаться нечему

При больших переживаниях по этому поводу всегда можно складывать типа :
var
sum10000 : dword;

sum10000 := sum10000 + real_to_dword( yNew -ar[nP] ) * 10000;
average := av10000 / 10 / 10000.0;

Real-вычисления в циклах - зародыш ватчдога

а какая точность может быть у средней, Вы же сами принудительно загрубляете
Тормознул