Oto kolejna odpowiedź zawierająca komentarz dotyczący tego , jak odpowiedź Muis , Abdullah Al-Ageel i Flip są matematycznie tym samym, z wyjątkiem tego , że są napisane inaczej.
Jasne, mamy analizę José Manuela Ramosa wyjaśniającą, jak błędy zaokrąglania wpływają na każdy z nich nieco inaczej, ale jest to zależne od implementacji i zmieni się w zależności od tego, jak każda odpowiedź została zastosowana do kodu.
Jest jednak dość duża różnica
Jest w Muis 's N
, flip ' s k
, a Abdullah Al-Ageel „s n
. Abdullah Al-Ageel nie do końca wyjaśnić, co n
powinno być, ale N
i k
różnią się tym, że N
jest „ liczba próbek, w których mają być średnio ponad ”, a k
jest liczba wartości próbki. (Chociaż mam wątpliwości, czy podanie N
liczby próbek jest dokładne.)
I tutaj dochodzimy do odpowiedzi poniżej. Zasadniczo jest to ta sama stara wykładnicza ważona średnia krocząca, co pozostałe, więc jeśli szukałeś alternatywy, zatrzymaj się tutaj.
Wykładnicza ważona średnia ruchoma
Początkowo:
average = 0
counter = 0
Dla każdej wartości:
counter += 1
average = average + (value - average) / min(counter, FACTOR)
Różnica jest min(counter, FACTOR)
częścią. To to samo, co mówienie min(Flip's k, Muis's N)
.
FACTOR
to stała, która wpływa na to, jak szybko średnia „dogania” najnowszy trend. Im mniejsza liczba, tym szybciej. (W 1
tym momencie nie jest już średnią i staje się najnowszą wartością).
Ta odpowiedź wymaga działającego licznika counter
. Jeśli jest to problematyczne, min(counter, FACTOR)
można je zastąpić just FACTOR
, zamieniając je w odpowiedź Muis . Problem z robieniem tego polega na tym, że na średnią ruchomą wpływa to, co average
jest parafowane. Jeśli zostało zainicjowane 0
, to zero może zająć dużo czasu, zanim wyjdzie ze średniej.
Jak to się kończy