Показать сообщение отдельно
Старый 04.05.2013, 01:51
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я может постараюсь завтра разобраться... не так много времени есть, как хотелось бы. Но я бы попробовал взять 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 Тут есть и посиск арифметического среднего и т.п. Может быть весьма полезно для работы с числами с плавающей запятой.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 04.05.2013 в 12:12.