Я может постараюсь завтра разобраться... не так много времени есть, как хотелось бы. Но я бы попробовал взять fann и с ее помощью проверить алгоритм. Если там все работает - искать технические ошибки. Если нет - то логические.
Да, еще такой вопрос: не пытаясь проанализировать код. На numeric underflow проверяли? Такое сложение чисел с плавающей запятой как у вас как правило ведет к большим ошибкам (тем более, что у вас значения должны быть в пределах [0,1].
Вместо

Код:
var sum:Number = 0;
for (var i:int = 0; i < N; i++) {
sum += 0.000XXX; // some small number
}
лучше делать:
вот по этой формуле:
http://en.wikipedia.org/wiki/Kahan_summation_algorithm

Код:
function kahanSum(input: Vector.<Number>): Number {
var sum: Number = 0.0;
var c: Number = 0.0; //A running compensation for lost low-order bits.
for (var y: Number, t:Number, i: int = 1; i < input.length; i++) {
y = input[i] - c //So far, so good: c is zero.
t = sum + y //Alas, sum is big, y small, so low-order digits of y are lost.
c = (t - sum) - y //(t - sum) recovers the high-order part of y; subtracting y recovers -(low part of y)
sum = t //Algebraically, c should always be zero. Beware eagerly optimising compilers!
//Next time around, the lost low part will be added to y in a fresh attempt.
}
return sum;
}
Адаптировано из Википедии.
А еще есть смысл тут посмотреть.
http://www.ibiblio.org/pub/languages/fortran/ch4-9.html Тут есть и посиск арифметического среднего и т.п. Может быть весьма полезно для работы с числами с плавающей запятой.