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

Вернуться   Портал аспирантов > Общие > Дискуссионный зал > Физико-математические науки

Ответ
 
Опции темы
Старый 02.12.2014, 18:17   #1
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,814
По умолчанию Тестирование процедур деления многоразрядных чисел

Иногда приходится реализовывать алгоритмы деления многоразрядных
чисел (с произвольным количеством разрядов) и с произвольным осно-
ванием системы счисления B >= 2 (необязательно 10). Алгоритмы деле-
ния известны и описаны в множестве книг по программированию, крип-
тографии и компьютерной алгебре. Однако в таких книгах почти ничего
говорится как тестировать корректность процедуры деления, какие вы-
бирать числа для тестирования всех особых случаем алгоритма деления.
Генерация случайных пар делимого и делителя (причем делимое больше
делителя) часто даже после миллиона испытаний не попадают на особые
случаи и ветки алгоритма, отвечающие за эти случаи, остаются непрове-
ренными и нет гарантий того, что не осталась какая-то скрытая ошибка,
которая потом неожиданно проявит себя в самый неподходящий момент.

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

Делимое 6-разрядное B-ичное число (В - четное): B/2+1, 2, 0, B/2-2, B-5, 0
Делитель 3-разрядное B-ичное число (В - четное): B/2, B/2+1, B/2
Частное получается 4-разрядное B-ичное число: 1, 0, B-1, B-3
Остаток получается 3-разрядное B-ичное число: B/2, B/2-1, B/2

В частности, в традиционной 10-й системе счисления тестовые числа:
Делимое: 620350
Делитель: 565
Частное: 1097
Остаток: 545

Таким образом, одним тестом можно проверить на вшивость всю процедуру.
Paul Kellerman вне форума   Ответить с цитированием
Реклама
Ответ


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

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



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


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