frexp возвращает не мантиссу числа, а normalized fraction.
Мантисса всегда лежит в диапазоне [1; 2), а то, что возвращает frexp -- в диапазоне [0.5; 1), т.е. вдвое меньше.
По вашему вопросу непонятно, где у вас возникли сложности.
- вы не можете придумать алгоритм? -- тут я затрудняюсь что-то посоветовать.
- вы не можете понять, с чего начать реализацию на с++? -- поищите hello world, найдёте пример того, как выглядят программы на с++.
- вы не можете реализовать алгоритм с помощью указателей? -- почитайте в ваших учебниках про указатели, поищите примеры работы с указателями на с++.
- вам нужно просто готовое решение? -- вы не туда обратились.
@begemot_sun зато это примерно две строчки кода, и через 5 минут будет понятно, действительно ли это тяжело и долго, или можно просто немного подождать.
> например, выбирать ключ таким, чтобы в начале создавались маленькие подмножества
Среди готовых алгоритмов шифрования такое свойство вряд ли у какого есть.
Можно сгенерировать случайную перестановку индексов множества и в качестве преобразования просто переставлять биты номера подмножества соглесно этой перестановке -- это вам даст сохранение числа единичных битов. Остаётся только перечислять подмножества в порядке увеличения числа единичных битов в номере.
> Поставил wireshark, тестил на нём. Покеты SYN приходят в большом количестве и от разных IP. И вроде бы всё хорошо.
а мне говорит TCP checksum incorrect.
Я за вас очень рад. Только мне это говорит лишь о том, что у вас там gcc древнее, чем 4.5.2, т.е. большей части c++0x у вас нет. А оставшуюся часть вам нужно где-нибудь включить, если вы любитель менюшек.
Мантисса всегда лежит в диапазоне [1; 2), а то, что возвращает frexp -- в диапазоне [0.5; 1), т.е. вдвое меньше.