forked from townforge/townforge
cc: make additional cities scale on 2^n, not 10^n
This commit is contained in:
parent
912906634f
commit
6d4f2a20bc
@ -1211,8 +1211,8 @@ uint64_t get_shares_needed_for_cities(size_t num_cities)
|
||||
// fixed point - shifted by 32 bits
|
||||
static uint256_t get_ideal_cities_32_256(uint64_t total_shares)
|
||||
{
|
||||
static const int256_t base = log10fix32(IDEAL_CITIES_SHARE_SCALE);
|
||||
int256_t x = 0x100000000 + log10fix32(total_shares) - base;
|
||||
static const int256_t base = log2fix32(IDEAL_CITIES_SHARE_SCALE);
|
||||
int256_t x = 0x100000000 + log2fix32(total_shares) - base;
|
||||
if (x < 1)
|
||||
x = 1;
|
||||
return x.convert_to<uint256_t>();
|
||||
|
@ -36,7 +36,7 @@ typedef boost::multiprecision::uint256_t uint256_t;
|
||||
#define INV_LOG2_E_Q1DOT31 UINT64_C(0x58b90bfc) // Inverse log base 2 of e
|
||||
#define INV_LOG2_10_Q1DOT31 UINT64_C(0x268826a1) // Inverse log base 2 of 10
|
||||
|
||||
int256_t log10fix32 (uint256_t x)
|
||||
int256_t log2fix32 (uint256_t x)
|
||||
{
|
||||
// This implementation is based on Clay. S. Turner's fast binary logarithm
|
||||
// algorithm[1].
|
||||
@ -70,8 +70,5 @@ int256_t log10fix32 (uint256_t x)
|
||||
b >>= 1;
|
||||
}
|
||||
|
||||
y *= INV_LOG2_10_Q1DOT31;
|
||||
y >>= 31;
|
||||
|
||||
return y;
|
||||
}
|
||||
|
@ -2624,25 +2624,25 @@ static bool about_equal(uint64_t x, uint64_t y)
|
||||
TEST(cc, cities)
|
||||
{
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 1) >> 32, 1);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 11) >> 32, 2);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 90) >> 32, 2);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 101) >> 32, 3);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 990) >> 32, 3);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 1010) >> 32, 4);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 9900) >> 32, 4);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 10100) >> 32, 5);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 99000) >> 32, 5);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 101000) >> 32, 6);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 990000) >> 32, 6);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 1010000) >> 32, 7);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 9900000) >> 32, 7);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 10100000) >> 32, 8);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 2) >> 32, 2);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 3) >> 32, 2);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 4) >> 32, 3);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 7) >> 32, 3);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 8) >> 32, 4);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 15) >> 32, 4);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 16) >> 32, 5);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 31) >> 32, 5);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 32) >> 32, 6);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 63) >> 32, 6);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 64) >> 32, 7);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 127) >> 32, 7);
|
||||
EXPECT_EQ(cc::get_ideal_cities_32(IDEAL_CITIES_SHARE_SCALE * 128) >> 32, 8);
|
||||
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(0, IDEAL_CITIES_SHARE_SCALE), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(1, IDEAL_CITIES_SHARE_SCALE * 10), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(2, IDEAL_CITIES_SHARE_SCALE * 100), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(3, IDEAL_CITIES_SHARE_SCALE * 1000), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(4, IDEAL_CITIES_SHARE_SCALE * 10000), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(1, IDEAL_CITIES_SHARE_SCALE * 2), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(2, IDEAL_CITIES_SHARE_SCALE * 4), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(3, IDEAL_CITIES_SHARE_SCALE * 8), BASE_CITY_COST));
|
||||
EXPECT_TRUE(about_equal(cc::get_new_city_cost(4, IDEAL_CITIES_SHARE_SCALE * 16), BASE_CITY_COST));
|
||||
}
|
||||
|
||||
TEST(cc, accrual_steps)
|
||||
|
Loading…
Reference in New Issue
Block a user