да чёрт его знает как оно работает если честно
Аналгем за 1-й курс, метод половинного деления aka бисекция

Составляем уравнение:
(nRewardCoinYearLimit / nRewardCoinYear) ^ 3 = bnProofOfStakeLimit / bnTarget
где неизвестным является nRewardCoinYear. Затем пытаемся решить его слегка модифицированным методом бисекции. Модифицированным, потому что находит только корни на отрезке [CENT, COIN]. Если же корень за пределами отрезка, то в качестве решения просто берется крайняя точка с соответствующей стороны отрезка.
грубо говоря разбиваешь большой отрезок на сто маленьких и находишь тот, которому принадлежит решение
...знаешь, мне всё-равно не нравится такой подход, ведь как я уже писал выше:
я бы сдвинул это округление на один знак вправо, до промилле. Ибо в будущем разница между, к примеру 3% и 4% может заставить в цикле после каждого нового блока включать/выключать майнинг, пытаясь подловить момент более удобный для чеканки блока с финансовой точки зрения.
Или, как вариант, оставить только два значащих знака, а-ля: 99%-10%, 9,9%-1,0%, 0,99%-0,10%..
P.S. От нечего делать подшаманил с графиком на табличке из моей подписи, имхо стало поинформативнее..