![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Написал пару модулей для работы с длинной арифметикой - четырые операции + пару вспомогательных. Требуется тестирование, так как работа там хитрая и возможны скрытые баги.
- арифметика произвольной точности (число разрядов в числах зависит только от размера доступной памяти); - все числа являются вещественными (то есть с дробной частью); - импорт и экспорт в строки; - классическое умножение и деление в столбик; - для работы используются и не математические операции (игра с разрядами и т.д.); - все функции документированы комментариями в исходных текстах; - работа реализована в "старом" стиле, то есть без ООП - поэтому существует возможность переноса на различные Паскали. По мотивам данной либы будет статья в журнал о том, как самому писать длинную арифметику под себя.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 10.12.2010 в 09:45. |
![]() |
![]() |
![]() |
#2 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]() Цитата:
P.S. Вы бы хоть txt дали, с чего начать, поскольку там присутствуют функи типа Init
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Там есть тестовый пример деления для образца при создании формы. Показывается как вводить числа, делить и выводить числа. Все просто
![]() Цитата:
Новая версия, исправил баг в операции деления - проглатывал нули в середине числа ![]()
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 10.12.2010 в 10:13. |
|
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#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. |
||
![]() |
![]() |
![]() |
#6 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]() Код:
Код:
А надо +8.91089109 Вообще при делении чуть реже чем всегда ошибается 9854.654 / 2445.126 = +4.33256324 (+4.03032564) |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Ладно, проведу детальный разбор алгоритма и выложу новую версию
![]() ![]() Пофикисл деление, вышеуказанные примеры работают как положено (вроде ![]() DivBigNumE - деление (на нуль с исключением) DivBigNumN - деление (на нуль с очень большим числом)
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Stilet; 24.12.2010 в 15:45. |
![]() |
![]() |
![]() |
#8 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
Ну, есть куда расти.
Код:
пыщь
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
JTG, помедленей, я записываю
![]() То есть косяк в том, что для больших результатов считает только половину заявленного?
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#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 |