Портал аспирантов
 

Вернуться   Портал аспирантов > Общие > Свободное общение

Ответ
 
Опции темы
Старый 01.11.2014, 16:45   #1
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,826
По умолчанию Программные UltraLong вычисления

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

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

P.S. Планирую использовать ее в своих расчетных программах, в том
числе для повышения точности вычислений при расчете надежности.
Вложения
Тип файла: zip UltraInt.zip (198.2 Кб, 5 просмотров)
Paul Kellerman вне форума   Ответить с цитированием
Реклама
Старый 01.11.2014, 23:24   #2
Hogfather
Platinum Member
 
Аватар для Hogfather
 
Регистрация: 22.07.2010
Адрес: Санкт-Петербург
Сообщений: 3,304
По умолчанию

Paul Kellerman, коллега, позвольте спросить, Вы это к кому тут обращаетесь? К экономистам или педагогам?
Не, моя лично уважуха к Вам высока, но, честно, сейчас не до серьезного тестирования. Раньше следующего года никак. Прошу понять. И простить.
---------
DNF is not an option
Hogfather вне форума   Ответить с цитированием
Старый 02.11.2014, 00:09   #3
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,826
По умолчанию

Hogfather, да в принципе ни к кому конкретно. Любой может наугад вбить пару
сверхдлинных целых числа в верхние два поля и нажать на любую из операций
и посмотреть на результат, и если он окажется неверным - написать об этом тут.
Paul Kellerman вне форума   Ответить с цитированием
Старый 02.11.2014, 20:36   #4
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,826
По умолчанию

Выявил пару глубоко скрытых ошибок в модуле деления (проявляющиеся
при определенных редких операндах). Выкладываю исправленную версию.
Кому не лень просьба погонять операцию деления, больно уж проблемная.
Вложения
Тип файла: zip Inttest.zip (198.1 Кб, 1 просмотров)
Paul Kellerman вне форума   Ответить с цитированием
Старый 03.11.2014, 17:14   #5
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,826
По умолчанию

И снова коварная ошибка в модуле деления (проявлялась только при
очень больших операндах вида 2^(64*t), t >= 1). Исправил, надеюсь,
что по крайней мере с делением разобрался. Выкладываю исправлен-
ный вариант. Также выкладываю вторую программку - рациональный
калькулятор на базе сверхбольших целых. Вводите операнды в виде
P/Q , где P и Q целые числитель и знаменатель дроби, без пробелов,
и нажимаете на желаемую операцию. Ответ тоже выводится дробью.
Вложения
Тип файла: zip IntRat.zip (396.5 Кб, 1 просмотров)
Paul Kellerman вне форума   Ответить с цитированием
Старый 03.11.2014, 20:44   #6
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,826
По умолчанию

Игры разума продолжаются... И опять деление, была обнаружена
потеря старших 32-битов частного, если оно расширяется в ходе
деления и занимает больше 320 битов. Исправил глючную строчку.
Вложения
Тип файла: zip IntRat.zip (396.5 Кб, 3 просмотров)
Paul Kellerman вне форума   Ответить с цитированием
Старый 05.11.2014, 17:19   #7
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,826
По умолчанию

Вроде все... Дзен похоже достигнут.
Выкладываю итоговые демо-версии.

Разрядность целых чисел: 32000 бит

Минимальное целое (абсолютное значение): 0
Максимальное целое (абсолютное значение): 2^32000 - 1.
Точность для любого целого числа: 1.
Максимальный размер в памяти: 4009 байтов.

Минимальное ненулевое дробное число (абсолютное значение): 1 / (2^32000 - 1) ~ 1,0968E-9633
Максимальное ненулевое дробное число (абсолютное значение): (2^32000 - 1) / 1 ~ 9,1172E+9632
Точность для дробного числа: 1 / (2^32000 - 1) ~ 1,0968E-9633.
Максимальный размер в памяти: 8018 байтов.

Себе сделал отдельную Pro-версию:

Разрядность целых чисел: 2097024 бит

Минимальное целое (абсолютное значение): 0
Максимальное целое (абсолютное значение): 2^2097024 - 1.
Точность для любого целого числа: 1.
Максимальный размер в памяти: 262137 байтов.

Минимальное ненулевое дробное число (абсолютное значение): 1 / (2^2097024 - 1) ~ 7.4881E-631268
Максимальное ненулевое дробное число (абсолютное значение): (2^2097024 - 1) / 1 ~ 1.3354E+631267
Точность для дробного числа: 1 / (2^2097024 - 1) ~ 7.4881E-631268
Максимальный размер в памяти: 524274 байтов.

Особенности реализации: числа хранится не в виде массива десятичных цифр (как это часто делают),
где под каждую десятичную цифру отводится по 4-бита, а в привычном для компьютера двоичном виде,
это на 20% экономит память, упрощает обработку чисел и облегчает оптимизацию на языке ассемблер.

Ниже демо-версии программ для операций с целыми и дробными числами:
Вложения
Тип файла: zip IntRat2.zip (397.4 Кб, 1 просмотров)

Последний раз редактировалось Paul Kellerman; 05.11.2014 в 18:30.
Paul Kellerman вне форума   Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 21:28. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2025, «Аспирантура. Портал аспирантов»
Рейтинг@Mail.ru