From f9667dcb3358df975ed3c6d2e2ff717ae4c44eb8 Mon Sep 17 00:00:00 2001 From: fsb4000 Date: Tue, 18 Nov 2014 20:12:26 +0600 Subject: [PATCH] =?utf8?q?=D1=82=D0=BE=D1=87=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B2=D1=8B=D1=87=D0=B8=D1=81=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Кажется нашёл, почему могут быть расхождения. Потому что при вычислении int dayWeight отбрасывается дробная часть при делении. Изменил так, чтобы деление проходило в coinAge. Так же сократил умножение на 2^224 и деление на 2^256 до деления на 2^32 Все оригинальные вычисления не удалил, а оставил в коментариях. --- MSVC/mynovacoinqt/mynovacoinqt.vcxproj | 3 ++- MSVC/mynovacoinqt/mynovacoinqt.vcxproj.filters | 3 +++ src/kernelrecord.cpp | 13 ++++++++----- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/MSVC/mynovacoinqt/mynovacoinqt.vcxproj b/MSVC/mynovacoinqt/mynovacoinqt.vcxproj index 7780327..cd66c30 100644 --- a/MSVC/mynovacoinqt/mynovacoinqt.vcxproj +++ b/MSVC/mynovacoinqt/mynovacoinqt.vcxproj @@ -1,4 +1,4 @@ - + @@ -286,6 +286,7 @@ C:\MyProjects\Deps\qt-everywhere-opensource-src-5.3.2-64\qtbase\bin\lrelease C:\ + diff --git a/MSVC/mynovacoinqt/mynovacoinqt.vcxproj.filters b/MSVC/mynovacoinqt/mynovacoinqt.vcxproj.filters index e5b1238..04a11fd 100644 --- a/MSVC/mynovacoinqt/mynovacoinqt.vcxproj.filters +++ b/MSVC/mynovacoinqt/mynovacoinqt.vcxproj.filters @@ -195,6 +195,9 @@ Generated Files + + Source Files + diff --git a/src/kernelrecord.cpp b/src/kernelrecord.cpp index eb68dd4..8c1d778 100644 --- a/src/kernelrecord.cpp +++ b/src/kernelrecord.cpp @@ -77,11 +77,14 @@ int64 KernelRecord::getAge() const double KernelRecord::getProbToMintStake(double difficulty, int timeOffset) const { - double maxTarget = pow(static_cast(2), 224); - double target = maxTarget / difficulty; - int dayWeight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge) / 86400; - uint64 coinAge = max(nValue * dayWeight / COIN, (int64)0); - return target * coinAge / pow(static_cast(2), 256); + //double maxTarget = pow(static_cast(2), 224); + //double target = maxTarget / difficulty; + //int dayWeight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge) / 86400; + //uint64 coinAge = max(nValue * dayWeight / COIN, (int64)0); + //return target * coinAge / pow(static_cast(2), 256); + int Weight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge); + uint64 coinAge = max(nValue * Weight / (COIN * 86400), (int64)0); + return coinAge / (pow(static_cast(2),32) * difficulty); } double KernelRecord::getProbToMintWithinNMinutes(double difficulty, int minutes) -- 1.7.1