LINUX.ORG.RU

Бибилиотека Fractions C++

 , ,


0

1

Привет, ЛОР!

Решил выложить в интернет свою библиотку для работы с дробями. Данная библиотека написана на C++. Надеюсь, что она кому-нибудь пригодится. Библиотека ещё сырая, может содержать ошибки!

Библиотека уже поддерживает:

1) Создание (определение дробей) с помощью числителя и делителя, десятичной дроби и целого числа.

2) Округление.

3) Операторы: унарный минус, сложение, вычитание, умножение, деление, остаток от деления.

4) Логические операции: больше, меньше, равно, не равно, больше или равно, меньше или равно.

5) Возведение, быстрое возведение.

6) Корень.

7) Модуль.

8) Ввод / вывод.

9) Конвертация в double и string.

Страничка проекта на SourceForge.net

P.S. Буду рад предложениям по доработкам, нововведениям и просто отзывам!

думаешь, у тебя получится лучше чем в gmp?

mashina ★★★★★
()

с помощью числителя и делителя

fix: с помощью числителя и знаменателя

P.S. Это учебный проект или вы её в каких-то своих проектах используете?

trex6 ★★★★★
()

P.P.S. Что-то я давно не пользовался sourceforge и в итоге не сумел найти исходников вашей библиотеки. Ткнете носом?

trex6 ★★★★★
()

Бегло проглядев инклуды:

1. Имена классов начинают с заглавной буквы.
2. Чем pow() отличается от fastPow()?
3. Что делает этот метод: fraction fra_fra(); ?
4. long long num;
unsigned long long div;
Лучше спрятать в приватный член и создать геттеры-сеттеры.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Это учебный проект или вы её в каких-то своих проектах используете?

Раньше возникла потребность в данной библиотеки (несколько лет назад), только на каком-то другом языке, не помню каком, пришлось писать свою, но она уже давно потерялась. Решил реализовать новую на C++, чтобы другим не приходилось писать свою.

Что-то я давно не пользовался sourceforge и в итоге не сумел найти исходников вашей библиотеки. Ткнете носом?

Остались в предыдущей версии, которую недавно удалил, выложу, когда уже окончательно определюсь с лицензией, пока только заголовочный файл и документация(wiki).

Human-source
() автор топика
Ответ на: комментарий от trex6

1. Имена классов начинают с заглавной буквы.

Все типы данных начинаются с маленькой буквы, поэтому и класс с маленькой. Стандарт этого не запрещает.

2. Чем pow() отличается от fastPow()?

fastPow() делает более быстрое возведение в степень, не округляя каждый раз дробь.

3. Что делает этот метод: fraction fra_fra(); ?

Возвращает дробную часть. Вместо 8/3 (2 2/3) вернёт 2/3.

4. long long num;

unsigned long long div; Лучше спрятать в приватный член и создать геттеры-сеттеры.

Пока решил оставить так, вдруг кому понадобится использовать числитель и делитель напрямую. Например, создать дробь 3/6, а не 1/2. Думаю ещё добавить bool _reduce для подтверждения округления, если false, то дродь не округляется при создании, если это возможно.

Human-source
() автор топика

Можно еще посмотреть в сторону GMP, MPIR и MPFR.

arturpub ★★
()
Ответ на: комментарий от Human-source

Все типы данных начинаются с маленькой буквы, поэтому и класс с маленькой. Стандарт этого не запрещает.

Но вот мозг и глаза у многих программеров придется потом реабилитировать.

MikeDM ★★★★★
()

В С++11 это уже было, и там выполняется почти все во время компиляции std::ratio.

UPD. Хотя нет, там все делается во время компиляции.

frozenix ★★★
()
Последнее исправление: frozenix (всего исправлений: 1)
Ответ на: комментарий от annulen

В чем отличие

В закрытом коде. Это даже не смешно, это грустно.

i-rinat ★★★★★
()
Ответ на: комментарий от Human-source

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

Это вообще писец и очень стыдно

lispfuerimmer
()
Ответ на: комментарий от Human-source

fastPow() делает более быстрое возведение в степень, не округляя каждый раз дробь.

Тогда зачем нужно медленное возведение в степень? Точность хуже?

trex6 ★★★★★
()
Ответ на: комментарий от Human-source

3. Что делает этот метод: fraction fra_fra(); ?

Возвращает дробную часть. Вместо 8/3 (2 2/3) вернёт 2/3.

Необходимо подобрать «говорящее» название для этого метода.

P.S.

Стандарт этого не запрещает.

Стандарт и говнокод не запрещает, но мы ведь в своих проектах его не используем?

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Тогда зачем нужно медленное возведение в степень? Точность хуже?

Точность абсолютно одинаковая. Просто, если дробь возводить в большую степень, то размера long long может не хватить.

Human-source
() автор топика
Ответ на: комментарий от trex6

Необходимо подобрать «говорящее» название для этого метода.

Как-то в голову ничего «говорящего», и при этом короткого, не пригодит :(

Human-source
() автор топика
Ответ на: комментарий от trex6

Исходники сейчас выложил, лежат в архиве в папке source, под лицензией GNU LGPLv3.

Human-source
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.