I think we agree? cool!
From what I understand what you are saying it that reset doesn't happens for everyone at the same time. I think it dose. And it happens when total score gets to big. The error accrue during reset because some other system is imputing new share that was found.
Why is the total score not in double integer? Or a byte integer what is increase every time when score is reset, then when block found is divided from user score?!
You would have to ask the programmer. Most likely there is not a "type" that is large enough to handle the number we are dealing with. We can't say for sure what is happening, we can only take a WAG(Wild Ass Guess) based on what we are seeing. No one but Slush can answer your question and he is Missing I Action at the moment.
Why not? double integer has 18446744073709600000 max volume. Thats not enough?
But when not enough then the optimal solution would a extra byte.
When the current TOTAL SCORE variable is full, then we have to do only increase a variable (declare name with= "spin") with 1.
So when the duration is on 1:00:00 then we reset the Total Score variable (we dont reset the user score variable!) and we set the "spin" to 1
on 2:00:00 we reseting again, and set the spin to 2
on 3:00:00 to 3 and so follow..
and when the block founded, then we calculate from these method:
reward = ( user score / spin ) / total score * 25
All is done?!