(yi > y) != (yj > y)
на y > min(yi, yj) && y <= max(yi,yj)
. Тут важно брать один из концов (верхний или нижний) включительно, а второй пропускать. Тогда все случаи разберутся правильно. ----------------------------------------------------------------------------------------
Benchmark Time CPU Iterations UserCounters...
----------------------------------------------------------------------------------------
Sum1_bn/iterations:1000000000 3.30 ns 3.27 ns 1000000000 sum=5
Sum2_bn/iterations:1000000000 3.38 ns 3.38 ns 1000000000 sum=5
void Sum1_bn(benchmark::State& state) {
unsigned char a = 3, b = 2;
unsigned char sum;
for (auto _ : state) {
sum = a + b;
}
state.counters["sum"] = sum;
}
char precompute[256][256];
void Sum2_bn(benchmark::State& state) {
unsigned char a = 3, b = 2;
precompute[a][b] = a + b;
unsigned char sum;
for (auto _ : state) {
sum = precompute[a][b];
}
state.counters["sum"] = sum;
}
BENCHMARK(Sum1_bn)->Iterations(1000000000);
BENCHMARK(Sum2_bn)->Iterations(1000000000);
прирост будет пусть лишь после 20,50,100 цифр
список формируется однократно в начале, а прямая адресация к памяти быстрее, чем запрос через массив
Заодно, откройте либы блокнотом и поищите в них "imp__Py_Initialize"