Non vedendo il codice integrale non posso né testarlo né verificare nel metodo con un debug.
Riparti da una versione stabile e funzionante, riscrivi il codice pezzo per pezzo verificando il risultato per ogni step e facendolo eseguire per valori "certi", andando solo dopo a sostituire quelli dinamici e - in caso di malfunzionamento - cercando di capire in che modo l'ultima modifica ha "rotto" la logica funzionante.