OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 15:17

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 26 Сентябрь, 2006 15:39 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
создавал совсем простенький проект в VS2005 на с# (ASP.NET)
особо в них не понимаю
вообщем столкнулся с тем что нехватает длины int32 и int64
нужно больше
вот вопрос
как понимаю других числовых типов там нету
нужен бооооольшой натуральный ряд с нулем
может есть какие теории по работе с такими числами или др не шибко сложные средства как это обойти?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 26 Сентябрь, 2006 19:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Не понял.

Если нужно просто посчитать что-то, можно взять Блэкбокс, модуль Integers.

Арифметика произвольной точности много где реализована. Теория -- например, у Кнута.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 29 Сентябрь, 2006 00:31 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Если немного уточнить, то у Кнута дана многократная точность (на массивах)... а произвольная вынесена в виде упражнения (и как все говорят, требует связного распределения, тобишь списков).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 29 Сентябрь, 2006 18:45 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Ох уж эти все :)))))

Массив нужной длины всегда под результат можно распределить -- как и делается, например, в модуле Integer.

В классическом Обероне, где нет открытых массивов, проще со списками.

Переложить кнутовские алгоритмы на списки -- косметика: там все проходы по "цифрам" последовательные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 29 Сентябрь, 2006 20:58 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Гм... хотя тема не совсем про это, раз уж разговор зашел, хочу кое-что обсудить.

Как я понимаю различие между многократной (multiple) и произвольной (arbitrary) точностью, многократная - это когда существует априори граница для максимальной длины числа (если и могут быть числа длиннее - то вероятность их появления мала). И она не так уж велика (в смысле выбранного основания системы, напр. 2^15). Произвольная - это когда предполагаемые длины неизвестны и могут часто появляться и "очень длинные" числа.

Вопрос выбора представления в виде массива или списка основывается не на том, где что проще использовать, а в эффективности использования этих представлений. (Про эффективность я пока говорю только с теоретической точки зрения; на конкретных практических задачах сравнивать эти подходы пока не доводилось.) И так, если говорить об операциях сложения и вычитания, то при использовании массивов, время пропорционально max(L(a), L(b)), а при использовании списков с перекрытием min(L(a), L(b)); L(x) - длина числа. Поэтому когда приходится, например, складывать очень длинное число с коротким, разница должна проявиться существенная.

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

Однако, я думаю, на практике должны попадаться задачи типа посчитать сумму или произведение ряда чисел. Здесь такой подход (неизменность) чреват дополнительными временными затратами и излишним засорением памяти. Поэтому пригодились бы такие операции как "прибавить к" или "умножить на", которые использовали бы один из аргументов в качестве приемника результата; если говорить на C++, += и *=. Ввести такие операции не сложно. Однако, теперь нужно быть увереным, что список цифр аргумента-приемника не перекрыт списками цифр других чисел (*).

И вот, собственно, тот "философский" вопрос, который я хотел обсудить: "Быть или не быть?". С одной стороны, гарантию выполнения (*) можно возложить на клиента модуля, тобишь на нас с вами - программистов, которым как человекам :) свойственно ошибаться. (Но ето не наши методы!) С другой стороны, какой подход применить, чтобы (*) можно было проверять эффективно программными средствами?

Я в свое время использовал счетчики ссылок в узлах, но это было на C++ - без сборки мусора; но с этими счетчиками про эффективное использование памяти и min(L(a), L(b)) можно забыть сразу... В общем какие будут ваши мнения, господа?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 30 Сентябрь, 2006 06:02 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Евгений Темиргалеев писал(а):
В общем какие будут ваши мнения, господа?

Накатать интерфейс к GMP?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 30 Сентябрь, 2006 13:16 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Чё я давно предлагаю сделать. :):):):):)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 02 Октябрь, 2006 01:21 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Я даже пытался, но упёрся в unsigned long :( Приведения типов и процедуры-обёртки тут явно не катят, ибо быстродействие, а безнаковых целых в ББ нет :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 02 Октябрь, 2006 08:28 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Евгений Темиргалеев писал(а):
С другой стороны, какой подход применить, чтобы (*) можно было проверять эффективно программными средствами?


COW? При попытке модификации элемента списка весь список копируется при количестве ссылок на него > 1. Такой подход используется в некоторых реализациях std::string. Скорее всего окажется неэффективен в случае многопоточности.

Евгений Темиргалеев писал(а):
Я в свое время использовал счетчики ссылок в узлах, но это было на C++ - без сборки мусора; но с этими счетчиками про эффективное использование памяти и min(L(a), L(b)) можно забыть сразу... В общем какие будут ваши мнения, господа?


Не очень понял, чем тебе помешали счетчики ссылок, если только ты не считал ссылки на каждый элемент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 02 Октябрь, 2006 20:46 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Речь шла именно про счетчик в каждом узле, чтобы сделать перекрывающиеся списки, для которых надо копировать не весь список, а только "хвост", который отностится к нескольким спискам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 12 Октябрь, 2006 21:35 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Евгений Темиргалеев писал(а):
Речь шла именно про счетчик в каждом узле, чтобы сделать перекрывающиеся списки, для которых надо копировать не весь список, а только "хвост", который отностится к нескольким спискам.


ИМХО это очень неэффективный подход.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB