Почему в create=1.00154685 есть 2 нуля после запятой
Наобум выскажу предположение. В логе используется какой-нить форматный С print, доставшийся в наследство ещё с BTC. Там было 8 чисел после запятой, а у NVC всего 6, отседова и два 0.
Поискал в исходниках, вот что нашёл
printf("GetProofOfStakeReward(): create=%s nCoinAge=%"PRI64d" nBits=%d\n", FormatMoney(nSubsidy).c_str(), nCoinAge, nBits);
string FormatMoney(int64 n, bool fPlus)
{
// Note: not using straight sprintf here because we do NOT want
// localized number formatting.
int64 n_abs = (n > 0 ? n : -n);
int64 quotient = n_abs/COIN;
int64 remainder = n_abs%COIN;
string str = strprintf("%"PRI64d".%08"PRI64d, quotient, remainder);
// Right-trim excess zeros before the decimal point:
int nTrim = 0;
for (int i = str.size()-1; (str[i] == '0' && isdigit(str[i-2])); --i)
++nTrim;
if (nTrim)
str.erase(str.size()-nTrim, nTrim);
if (n < 0)
str.insert((unsigned int)0, 1, '-');
else if (fPlus && n > 0)
str.insert((unsigned int)0, 1, '+');
return str;
}
nSubsidy = nCoinAge * nRewardCoinYear * 33 / (365 * 33 + 8);
nSubsidy = min(nSubsidy, nSubsidyLimit);
Видимо
gades,
Sibiryak и я нашли баг
и вместо
string str = strprintf("%"PRI64d".%08"PRI64d, quotient, remainder);
нужно
string str = strprintf("%"PRI64d".%06"PRI64d, quotient, remainder);