Дмитрий Дагаев писал(а):
Я привожу условия и замеры, которые проводились в данных условиях.
Это хорошо. К сожалению, часто при публикации сравнений вообще не считают нужным указать условия, сравнение, код и т.п.
Дмитрий Дагаев писал(а):
Можно с ними спорить, в части size(256) я готов с Вами согласиться.
Т.е. методологическая ошибка номер раз.
Дмитрий Дагаев писал(а):
В части разного числа ключей - Вы не правы, т.к. irand % NC дает NC ключей.
Вы либо запутались, либо лукавите.
Смотрим на код:
Код:
void RandSString(int irand, string &srnd)
{
const int CM = 50, NC = 200, NMAX = NC+CM;
srnd.resize(256);
int j = 0;
while (irand != 0) {
srnd[j] = (char)(irand % NC + CM);
++j;
irand = irand / NC;
}
}
1) Очевидно, что
количество различных ключей (== количество различных строк на выходе) не может быть больше
количества различных значений irand, попадающих на вход функции RandSString. Верно? Это нужно доказывать? Ну, это же чистая функция без состояния, т.е. каждому значению аргумента будет соответствовать одна фиксированная результирующая строка, и таким образом, количество результирующих строк не может превысить количество различных входных значений. Принцип Дирихле или что-то типа того.
Тут у вас вторая ошибка: в C++ используется 32bit случайное значение, а в BlackBox -- 16 bit. Я уже цитировал: Uniform возвращает значение от 0 до 1, вы его умножаете на 32767, т.е. никак не можете получить больше 32767 различных значений.
2) Легко заметить, что количество букв определяется значением irand. Если irand<200, то будет одна буква. Если irand < 200*200, то будет 2 буквы.
Кстати, в случае BlackBox, похоже, в ключе всегда одна-две буквы (т.к. аргумент не превышает 32767)
В C++ же случае irand может быть порядка 32bit, т.е. нужно 4-5 раз прокручивать irand = irand / NC, чтобы irand оказалось равно нулю.
Получается, что в C++ используются более длинные ключи, что в свою очередь, влечёт за собой более длительные операции сравнения. Ну, технически, наверное, разницы между двумя или четыремя буквами для современных процессоров нет, но всё же не стоит на ровном месте в сравнение закладывать различие.
Дмитрий Дагаев писал(а):
Теперь про сравнение C++ и BlackBox в плане быстродействия. Я не переходил от частного к общему, утверждая, что BB работает быстрее.
Я про общее и не говорил. Всё, что я тут пишу относится именно к вашему коду.
У вас "частные" случаи для BlackBox и C++ совсем разные. И, похоже, вы забыли включить -O3.