Подсказки для представления библиотеки для Повышения?

Лето наступает, и группа друзей и я готовлюсь к нему :)

Мы решили создать Произвольную точность времени компиляции Целые числа без знака. Мы хотели бы обеспечить ряд целочисленных алгоритмов (функции) с библиотекой. Мы видели много запросов на такую библиотеку (SoC2010, C++ 0x Стандартный список пожеланий Библиотеки). Кроме того, регулярное время выполнения bigint обычно требуется с этим, но мы не хотим входить в стычку управления памятью. Идея прибыла ко мне из библиотеки под названием TTMath, к сожалению, этой библиотеки работы только над определенными платформами, потому что блок использовался экстенсивно в библиотеке. Мы хотели бы записать стандартную библиотеку, в зависимости от библиотеки стандарта C++ и Повышения. Кроме того, мы хотели бы использовать доступный C++ 0x средства в текущих компиляторах как пользовательские литералы и другие. Это технически сделало бы библиотеку нестандартной некоторое время, но мы думаем, что это - вопрос времени, новые стандарты будут официальны.

Ваши подсказки на целом процессе включая дизайн, реализацию, документацию, удобную в сопровождении из библиотеки, являются больше, чем приветствие. Мы - группа студентов и новых выпускников, которые ищут что-то интересное летом, но мы видим, что Повышение полно гуру, и мы не хотим забывать что-то слишком очевидное. Мы связываемся онлайн, таким образом, нет никаких общих электронных досок :(

Вот пример пользования такой библиотекой:

typedef our_namespace::uint<512> uint512_t;
// declaring an unsigned int with 512 bits width.
// After that the user is supposed to deal with it just like the native types.

Спасибо,

15
задан 2 revs 16 June 2010 в 21:43
поделиться

6 ответов

Два дополнительных совета:

a) Планирование чистой библиотеки C++0x кажется не очень хорошей идеей в контексте Boost. Одной из целей Boost является предоставление кросс-платформенных/кросс-компиляторных библиотек. Обычно авторы Boost, заинтересованные в использовании возможностей C++0x, делают это в качестве альтернативы при использовании компилятора C++0x. Для этого Boost предопределяет целый набор макросов препроцессора, по одному для каждой из возможностей C++0x.

б) Пожалуйста, подумайте о том, чтобы написать в список разработчиков Boost со своими идеями, описав набор возможностей планируемой библиотеки. Вы можете задать те же вопросы там, btw. Я уверен, что вы получите много полезных ответов и предложений, если сделаете это.

5
ответ дан 1 December 2019 в 04:17
поделиться

Мой совет: зайдите на сайт повышения и следуйте инструкциям, которые отвечают на ваш точный вопрос.

2
ответ дан 1 December 2019 в 04:17
поделиться

Начните с мотивации для такой вещи. Интересно, какие есть приложения. Под "временем компиляции", я полагаю, вы имеете в виду шаблонное решение для метапрограммирования, верно?

Это звучит как забавный проект, но, возможно, бесполезен как часть повышения (или, возможно, полезен ... вам придется предоставить это важное подробно.)

1
ответ дан 1 December 2019 в 04:17
поделиться

Прежде всего, вам следует прочитать Требования и рекомендации библиотеки Boost.

4
ответ дан 1 December 2019 в 04:17
поделиться

Пожалуйста, реализуйте эффективную функцию modpow. Аналогично Java [BigInteger.modPow][1]

Шифрование RSA довольно простое, если разобраться. Два простых числа и несколько обычных математических операторов. Тривиально реализовать <32-битное шифрование с помощью стандартного C++.

Пара этих операций может быть весьма трудоемкой для процессора: умножение с последующим модулем. Было проведено много исследований, поскольку RSA используется очень широко, и эти две операции могут быть эффективно объединены. Новая операция называется modpow.

Таким образом, имея эффективную библиотеку iteger произвольной точности с эффективной modpow, можно тривиально реализовать полноценный RSA. Полноценное криптографическое решение также потребует генерации случайных простых чисел, но это уже более широкая область.

[1]: http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html#modPow(java.math.BigInteger, java.math.BigInteger)

2
ответ дан 1 December 2019 в 04:17
поделиться

Идея пришла ко мне из библиотеки под названием TTMath, к сожалению, эта библиотека работает только на определенных платформах, потому что Ассемблер был использован в библиотеке.

Планируете ли вы реализовать полную поддержку алгебрических операций? (сложение, умножение, квадратный корень и так далее).

Если да, то обратите внимание на класс CryptoPP::Integer. Это полнофункциональный класс целых чисел произвольной точности, поддерживающий все арифметические операции. Он также является кроссплатформенным.

Проблема с ним заключается в том, что он создан с учетом сложной алгебры (для криптографических операций), так что это гораздо больше, чем обычный класс целых чисел.

Он также поддерживает кодирование и декодирование BER/DER и OpenPGP как часть класса, наряду с множеством других операций, которые, вероятно, не должны быть частью общей реализации целого числа.

Ваши подсказки по всему процессу включая проектирование, реализацию, документацию, сопровождение библиотеки, более чем приветствуются.

Вы также могли бы рассмотреть возможность разработки класса десятичных дробей (аналогичного c# decimal), похожего на float/double, но не теряющего точности при переполнении. По крайней мере, математическая часть будет намного проще.

2
ответ дан 1 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: