|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.12.2010, 09:42 | #1 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Тест либы
Написал пару модулей для работы с длинной арифметикой - четырые операции + пару вспомогательных. Требуется тестирование, так как работа там хитрая и возможны скрытые баги.
- арифметика произвольной точности (число разрядов в числах зависит только от размера доступной памяти); - все числа являются вещественными (то есть с дробной частью); - импорт и экспорт в строки; - классическое умножение и деление в столбик; - для работы используются и не математические операции (игра с разрядами и т.д.); - все функции документированы комментариями в исходных текстах; - работа реализована в "старом" стиле, то есть без ООП - поэтому существует возможность переноса на различные Паскали. По мотивам данной либы будет статья в журнал о том, как самому писать длинную арифметику под себя.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 10.12.2010 в 09:45. |
10.12.2010, 09:58 | #2 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Цитата:
P.S. Вы бы хоть txt дали, с чего начать, поскольку там присутствуют функи типа Init
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
10.12.2010, 10:03 | #3 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Там есть тестовый пример деления для образца при создании формы. Показывается как вводить числа, делить и выводить числа. Все просто .
Цитата:
Новая версия, исправил баг в операции деления - проглатывал нули в середине числа .
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 10.12.2010 в 10:13. |
|
10.12.2010, 10:22 | #4 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Нашел одну не то, чтобы багу.
При делении некоторых чисел друг на друга (Например 10 и 6) получается бесконечная периодическая дробь с шагом 1 и добавочным остатком: 1.666666666666666666667 ( 1.(6)7 ). Остаток библиотека не обрабатывает. Выводит 1.666666666666666666666. В чем соль фичи? Иногда при округлении используется этот остаток - 1.444444444444444444445 => 1.44444445 => 1.45 => 1.5 __________________________ При попытке деления 0 на 1 (0/1) зависает намертво. __________________________ аналогично при делении 1/0. Ни ошибки, ничего. Зависание. P.S. Если хотите проверить точность - вычисляйте Пи: Все^W Большинство^W Часть цифр после запятой известна, поэтому можно проверять хоть до миллионного знака.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ Последний раз редактировалось Alex Cones; 10.12.2010 в 10:30. |
10.12.2010, 10:34 | #5 | ||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Округления не реализовано . Но легко сделать самому. Смысл - при делении указываете операнды, количество разрядов в дробной части и куда пихать результат. Дело в том, что деление это единственная операция, которая может порождать бесконечное число разрядов. Вы просто указываете до каких пор продолжать деление. Меня интересовал собственно длинный результат - упор при разработке операции деления делался на точность данных. Это полезно например при астрономических расчетах.
Далее вопрос номер два - как округлять - в какую сторону - включать ли 5? Или считать ее отдельно? Далее, 1,666 это конечно 1,67. Но как быть с 1,333? Это же не 1,34, но и не 1,33... Насчет нулей щас решим . Кстати, либа задмывалась, так что разделителем целой и дробной части может быть и точка и запятая. Перевод числа из строки - функция, обратите на это внимание. -----ДОБАВЛЕНО--------------- О нулях . Ладно нуль мы поделим, как быть с делением на нуль? Есть варианты: 1. Возвращать нуль (или не нуль - просто какое-либо число). 2. Генерировать ошибку Лично я против второго варианта ----ДОБАВЛЕНО---------------- Цитата:
----ДОБАВЛЕНО--------------- Решил баг с нулями. Деление на нуль пока выдает 0. Что предложите вместо? Цитата:
Новая версия (специально не стал перезаливать, чтобы была возможность сравнить тексты) - опять проблема с результатом от деления - он отличался на 10^n. Теперь это исправлено.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Stilet; 24.12.2010 в 15:43. |
||
21.12.2010, 12:28 | #6 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Код:
Код:
А надо +8.91089109 Вообще при делении чуть реже чем всегда ошибается 9854.654 / 2445.126 = +4.33256324 (+4.03032564) |
21.12.2010, 12:38 | #7 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Ладно, проведу детальный разбор алгоритма и выложу новую версию . Все дело в волшебных нулях .
Пофикисл деление, вышеуказанные примеры работают как положено (вроде ) DivBigNumE - деление (на нуль с исключением) DivBigNumN - деление (на нуль с очень большим числом)
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Stilet; 24.12.2010 в 15:45. |
24.12.2010, 19:03 | #8 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Ну, есть куда расти.
Код:
пыщь
|
25.12.2010, 09:05 | #9 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
JTG, помедленей, я записываю .
То есть косяк в том, что для больших результатов считает только половину заявленного?
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
25.12.2010, 20:27 | #10 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Да, это с модулями из первого поста. Из №7 вообще не работает
Код:
пыщь
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Тест | треч | Помощь студентам | 8 | 17.03.2011 23:27 |
тест + БД | asuszzz | Помощь студентам | 2 | 30.05.2010 11:31 |
Тест | SERG1980 | БД в Delphi | 1 | 20.07.2007 12:58 |
Тест | djeyana | Общие вопросы по Java, Java SE, Kotlin | 0 | 28.06.2007 00:19 |