#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX_COUNT (1 << 29)
size_t counter = 0;
size_t testSwitch()
{
size_t i;
for (i = 0; i < MAX_COUNT; i++)
{
switch (counter % 4 + 1)
{
case 1: counter += 4; break;
case 2: counter += 3; break;
case 3: counter += 2; break;
case 4: counter += 1; break;
}
}
return 1000 * (clock() - start
) / CLOCKS_PER_SEC
; }
size_t testIf()
{
size_t i;
for (i = 0; i < MAX_COUNT; i++)
{
// Теперь вычисления идут прямо в условиях, без промежуточной константы
if (counter % 4 + 1 == 1) { counter += 4; }
else if (counter % 4 + 1 == 2) { counter += 3; }
else if (counter % 4 + 1 == 3) { counter += 2; }
else if (counter % 4 + 1 == 4) { counter += 1; }
}
return 1000 * (clock() - start
) / CLOCKS_PER_SEC
; }
int main()
{
printf("Switch statement: %u ms\n", testSwitch
()); printf("If statement: %u ms\n", testIf
()); }
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHRpbWUuaD4KCiNkZWZpbmUgTUFYX0NPVU5UICgxIDw8IDI5KQpzaXplX3QgY291bnRlciA9IDA7CgpzaXplX3QgdGVzdFN3aXRjaCgpCnsKICAgIGNsb2NrX3Qgc3RhcnQgPSBjbG9jaygpOwogICAgc2l6ZV90IGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NPVU5UOyBpKyspCiAgICB7CiAgICAgICAgc3dpdGNoIChjb3VudGVyICUgNCArIDEpCiAgICAgICAgewogICAgICAgICAgICBjYXNlIDE6IGNvdW50ZXIgKz0gNDsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjogY291bnRlciArPSAzOyBicmVhazsKICAgICAgICAgICAgY2FzZSAzOiBjb3VudGVyICs9IDI7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6IGNvdW50ZXIgKz0gMTsgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDEwMDAgKiAoY2xvY2soKSAtIHN0YXJ0KSAvIENMT0NLU19QRVJfU0VDOwp9CgpzaXplX3QgdGVzdElmKCkKewogICAgY2xvY2tfdCBzdGFydCA9IGNsb2NrKCk7CiAgICBzaXplX3QgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfQ09VTlQ7IGkrKykKICAgIHsKICAgICAgICAvLyDQotC10L/QtdGA0Ywg0LLRi9GH0LjRgdC70LXQvdC40Y8g0LjQtNGD0YIg0L/RgNGP0LzQviDQsiDRg9GB0LvQvtCy0LjRj9GFLCDQsdC10Lcg0L/RgNC+0LzQtdC20YPRgtC+0YfQvdC+0Lkg0LrQvtC90YHRgtCw0L3RgtGLCiAgICAgICAgaWYgKGNvdW50ZXIgJSA0ICsgMSA9PSAxKSB7IGNvdW50ZXIgKz0gNDsgfQogICAgICAgIGVsc2UgaWYgKGNvdW50ZXIgJSA0ICsgMSA9PSAyKSB7IGNvdW50ZXIgKz0gMzsgfQogICAgICAgIGVsc2UgaWYgKGNvdW50ZXIgJSA0ICsgMSA9PSAzKSB7IGNvdW50ZXIgKz0gMjsgfQogICAgICAgIGVsc2UgaWYgKGNvdW50ZXIgJSA0ICsgMSA9PSA0KSB7IGNvdW50ZXIgKz0gMTsgfQogICAgfQogICAgcmV0dXJuIDEwMDAgKiAoY2xvY2soKSAtIHN0YXJ0KSAvIENMT0NLU19QRVJfU0VDOwp9CgoKaW50IG1haW4oKQp7CiAgICBwcmludGYoIlN0YXJ0aW5nLi4uXG4iKTsKICAgIHByaW50ZigiU3dpdGNoIHN0YXRlbWVudDogJXUgbXNcbiIsIHRlc3RTd2l0Y2goKSk7CiAgICBwcmludGYoIklmICAgICBzdGF0ZW1lbnQ6ICV1IG1zXG4iLCB0ZXN0SWYoKSk7Cn0=