Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > 50-разрядный калькулятор


Автор: kivankov 30.4.2012, 18:33
Друзья!

Прошу Вас проконсультировать меня по одному вопросу.

Насколько реализуемой, и если реализуемой, то насколько трудоёмкой для исполнения в человеко-днях является создание библиотеки для операций с числами с мантиссой 50 разрядов? Т.е. по сути нужен 50-разрядный калькулятор.

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

Вопрос не праздный, есть конкретная задача.

С уважением,
Константин

Автор: nworm 30.4.2012, 18:45
Трудоёмкой, но реализуемый.

Надо смотреть вот на что. Обязательно надо именно 50 разрядов?
Часто проще взять готовые библиотеки с похожим числом разрядов.
Есть библиотеки для работы со коль угодно длинными целыми числами.
Возможно, и для сколь угодно точных вещественных есть библиотеки.

Автор: kivankov 30.4.2012, 18:51
Нет, минимум нужно 45-48 разрядов. 50 - это с запасом.
Если больше - то не помешает.
Калькулятор требуется для подтверждения гипотезы о существовании целого числа 4,16... E42 в связи с конкретной задачей. Лишние разряды не повредят.

Спасибо за информацию, приму к сведению.
А где можно поискать такие библиотеки?

Автор: Akina 30.4.2012, 18:59
По-моему, найти библиотеку для работы со сверхдлинными числами, да ещё с таким простейшим набором действий - совершенно не проблема...

Автор: Фантом 30.4.2012, 19:16
Цитата(kivankov @  30.4.2012,  19:33 Найти цитируемый пост)

Вопрос не праздный, есть конкретная задача.

Для решения одной конкретной задачи проще всего воспользоваться уже готовыми инструментами. В данном конкретном случае - любым достаточно универсальным пакетом компьютерной алгебры.

Автор: _Y_ 30.4.2012, 22:01
Цитата(Фантом @  30.4.2012,  19:16 Найти цитируемый пост)
любым достаточно универсальным пакетом компьютерной алгебры. 


В конце 80х был такой язык Reduce. Это была первая мне известная компьютерная алгебра. В нем же можно было проводить вычисления с заданным, но ничем не ограниченным, числом знаков. Потом этот язык вошел в Maple, а сейчас, после многий преобразований, его потомство живет в Mathematica от Wolfram Research. Но, честно говоря, не знаю сохранилась ли там до сих пор возможность таких вычислений. В любом случае, стОит попробовать - море времени сэкономится.

Автор: Фантом 30.4.2012, 22:10
Цитата(_Y_ @  30.4.2012,  23:01 Найти цитируемый пост)
В конце 80х был такой язык Reduce. Это была первая мне известная компьютерная алгебра. В нем же можно было проводить вычисления с заданным, но ничем не ограниченным, числом знаков. Потом этот язык вошел в Maple, а сейчас, после многий преобразований, его потомство живет в Mathematica от Wolfram Research. Но, честно говоря, не знаю сохранилась ли там до сих пор возможность таких вычислений. В любом случае, стОит попробовать - море времени сэкономится.

Историю Вы малость перепутали.  smile REDUCE (это не язык, а пакет) существует и сейчас, хотя лидирующие позиции и утратил. Maple и Mathematica - не наследники REDUCE, а аналоги (не являющиеся и потомками друг друга). 

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

Автор: volatile 1.5.2012, 00:17
Цитата(kivankov @  30.4.2012,  18:51 Найти цитируемый пост)
для подтверждения гипотезы о существовании целого числа 

Если только целые числа, то питон поддерживает бесконечную разрядность для целых чисел.

можно даже онлайн:
http://codepad.org/YFyA3AcS

Автор: disputant 1.5.2012, 06:45
Цитата(volatile @ 1.5.2012,  00:17)
Если только целые числа, то питон поддерживает бесконечную разрядность для целых чисел.

REXX тоже умеет smile

Для C/C++ давно использую http://www.tc.umn.edu/~ringx004/mapm-main.html (ну, так исторически получилось smile)

Автор: _Y_ 1.5.2012, 23:07
Цитата(Фантом @ 30.4.2012,  22:10)
Историю Вы малость перепутали.  smile REDUCE (это не язык, а пакет) существует и сейчас, хотя лидирующие позиции и утратил. Maple и Mathematica - не наследники REDUCE, а аналоги (не являющиеся и потомками друг друга). 

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

Может сейчас Reduce и пакет, но когда я с ним работал был языком. В инструкции было написано Язык Reduce построенный на базе языка RLisp, в свою очередь построенного на базе Lisp (не дословно так как написано было по-английски). Как я понимаю, пакет это дополнение к имеющемуся языку или программе. А Reduce для работы не требовал предварительной установки чего-то еще. Работал я с ним сначала на больших машинах, а потом на чем-то настольном  - не помню уже может это была система PDP-11 а может уже и DOS.

Были у него лидирующие позиции или нет - не знаю. В то время что в руки попало подходящее с тем и работали. Интернета не было - С информацией слабо было.

С Maple я никогда не работал - могу и ошибаться. А вот первая или вторая Mathematica брали мои старые Reduce-программы без необходимости какой-либо переработки. Так что, думаю, это все-таки был Reduce.

Про другие системы я не в курсе - не приходилось сталкиваться.

Автор: volatile 1.5.2012, 23:42
Цитата(disputant @  1.5.2012,  06:45 Найти цитируемый пост)
 MAPM

косяки у нее были (щас не знаю как).
мне вот http://www.ttmath.org/ttmath больше по душе.

Автор: Фантом 1.5.2012, 23:54
Цитата(_Y_ @  2.5.2012,  00:07 Найти цитируемый пост)

Может сейчас Reduce и пакет, но когда я с ним работал был языком. В инструкции было написано Язык Reduce построенный на базе языка RLisp, в свою очередь построенного на базе Lisp (не дословно так как написано было по-английски).

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

Автор: disputant 2.5.2012, 12:52
Цитата(volatile @ 1.5.2012,  23:42)
Цитата(disputant @  1.5.2012,  06:45 Найти цитируемый пост)
 MAPM

косяки у нее были (щас не знаю как).
мне вот http://www.ttmath.org/ttmath больше по душе.

А какие именно, не помните? Когда? 

Автор: W4FhLF 2.5.2012, 15:04
В новом наборе инструкций AVX регистры процессора 256разрядные. Это больше 50 значащих знаков. Но я не уверен, что с ними можно работать как с единым числом?

Есть такие интересные пакеты: http://www.advanpix.com/
Где разрядность задаётся явно.

Автор: _Y_ 2.5.2012, 21:45
Цитата(Фантом @  1.5.2012,  23:54 Найти цитируемый пост)
"Пакет" - это комплекс программ, предназначенный для решения задач из некоторой предметной области. Соответственно, частью пакета может быть интерпретатор некоторого языка. В такой ситуации пакеты и встроенные языки для них действительно часто смешивают.

Хорошо, но тогда что, помимо интерпретатора входило в тот архаичный Reduce?

Автор: Фантом 2.5.2012, 23:31
Цитата(_Y_ @  2.5.2012,  22:45 Найти цитируемый пост)

Хорошо, но тогда что, помимо интерпретатора входило в тот архаичный Reduce? 

Собственно система компьютерной алгебры.  smile Разобрать какой-нибудь integrate(sin(x),x) не проблема - проблема найти аналитическое представление для первообразной заданной функции.

Автор: volatile 3.5.2012, 00:17
Цитата(disputant @ 2.5.2012,  12:52)
Цитата(volatile @ 1.5.2012,  23:42)
Цитата(disputant @  1.5.2012,  06:45 Найти цитируемый пост)
 MAPM

косяки у нее были (щас не знаю как).
мне вот http://www.ttmath.org/ttmath больше по душе.

А какие именно, не помните? Когда?

disputant, мне когда-то (года ~2 назад) для одного проекта нужна была длинная арифметика, и я тестировал несколько разных библиотек.
Все протестированные либы сложил в папочку, со своими комментариями.
Щас посмотрел в ту папочку. Среди протестированных оказалась и MAPM.
Вот мои комментарии того времени. (писал их исключительно для себя)
Цитата

Впечатление что писал либу дилетант.
Иногда выдает варнинг на экран. (Для либы не годится)
Часто воспринимает за числа полную фигню молча. (Вообще ни для чего никуда не годится.)
например
ввод - вывод

3j3k3l - 888990.0
1q1q - 7575.0
3t3t - 9898.0
4t4t - MAPM Warning: 'm_apm_set_string', Non-digit char found in parse

Числа в библиотеке используются десятичные.
Много идиотского кода.
Но оформлено все хорошо.
Вставить в свою прогу либу легко.
Есть хорошая обёртка С++.

тестировалась либа в течение нескольких часов, так что глубоко не копал, но этого хватило чтобы отвергнуть ее.

Автор: disputant 3.5.2012, 06:16
Спасибо, эти баги (со вводом) остались. 

Если бы быть уверенным, что в математике багов нет...
с этими-то справиться достаточно легко, все равно у меня своя обертка. А, как вы справедливо заметили, MAPM очень легкая в использовании. На ttmath посмотрел - Open Watcom вообще не компилит, вылетает с run-time ошибкой... :(

Автор: _Y_ 3.5.2012, 21:07
Цитата(Фантом @ 2.5.2012,  23:31)
Цитата(_Y_ @  2.5.2012,  22:45 Найти цитируемый пост)

Хорошо, но тогда что, помимо интерпретатора входило в тот архаичный Reduce? 

Собственно система компьютерной алгебры.  smile Разобрать какой-нибудь integrate(sin(x),x) не проблема - проблема найти аналитическое представление для первообразной заданной функции.

Ничего не понял. А что тогда язык Reduce если не система компьютерной алгебры?

Автор: Фантом 3.5.2012, 21:25
Цитата(_Y_ @  3.5.2012,  22:07 Найти цитируемый пост)

Ничего не понял. А что тогда язык Reduce если не система компьютерной алгебры? 

Хм... Вы всерьез не видите разницы между языком и компилятором/интерпретатором этого языка?


Автор: _Y_ 3.5.2012, 23:25
Цитата(Фантом @  3.5.2012,  21:25 Найти цитируемый пост)
 Вы всерьез не видите разницы между языком и компилятором/интерпретатором этого языка?

 smile Это не автомобиль. Это пакет. Вы всерьез не видете разницы между автомобилем и мотором автомобиля?
Мне кажется, что дискуссия ушла в какие-то семантические дебри. ИМХО если имеем некий продукт и этот продукт имеет всего одну основную функцию, то и категорируется он соответственно этой функции, а не по тому, что там внутри эту функцию обеспечивает.

Автор: Фантом 4.5.2012, 12:26
Цитата(_Y_ @  4.5.2012,  00:25 Найти цитируемый пост)
не кажется, что дискуссия ушла в какие-то семантические дебри. ИМХО если имеем некий продукт и этот продукт имеет всего одну основную функцию, то и категорируется он соответственно этой функции, а не по тому, что там внутри эту функцию обеспечивает.

Ну как хотите. Ваш подход к именованию не является общепринятым, но, если Вам так удобнее, пожалуйста.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)